Skip to content

Commit 7ba54cd

Browse files
WIP
1 parent 0ea118f commit 7ba54cd

File tree

23 files changed

+1973
-129
lines changed

23 files changed

+1973
-129
lines changed

Cargo.lock

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ members = [
5656
"extensions/ecc/transpiler",
5757
"extensions/ecc/guest",
5858
"extensions/ecc/sw-setup",
59+
"extensions/ecc/te-setup",
5960
"extensions/ecc/tests",
6061
"extensions/pairing/circuit",
6162
"extensions/pairing/transpiler",
@@ -153,6 +154,7 @@ openvm-ecc-circuit = { path = "extensions/ecc/circuit", default-features = false
153154
openvm-ecc-transpiler = { path = "extensions/ecc/transpiler", default-features = false }
154155
openvm-ecc-guest = { path = "extensions/ecc/guest", default-features = false }
155156
openvm-ecc-sw-setup = { path = "extensions/ecc/sw-setup", default-features = false }
157+
openvm-ecc-te-setup = { path = "extensions/ecc/te-setup", default-features = false }
156158
openvm-pairing-circuit = { path = "extensions/pairing/circuit", default-features = false }
157159
openvm-pairing-transpiler = { path = "extensions/pairing/transpiler", default-features = false }
158160
openvm-pairing-guest = { path = "extensions/pairing/guest", default-features = false }

crates/circuits/mod-builder/src/builder.rs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
use std::{cell::RefCell, ops::Deref, rc::Rc};
1+
use std::{cell::RefCell, iter, ops::Deref, rc::Rc};
22

3+
use itertools::zip_eq;
34
use num_bigint_dig::{BigInt, BigUint, Sign};
45
use num_traits::Zero;
56
use openvm_circuit_primitives::{
@@ -209,6 +210,9 @@ pub struct FieldExpr {
209210
pub check_carry_mod_to_zero: CheckCarryModToZeroSubAir,
210211

211212
pub range_bus: VariableRangeCheckerBus,
213+
214+
// any values other than the prime modulus that need to be checked at setup
215+
pub setup_values: Vec<BigUint>,
212216
}
213217

214218
impl FieldExpr {
@@ -229,8 +233,20 @@ impl FieldExpr {
229233
builder,
230234
check_carry_mod_to_zero: subair,
231235
range_bus,
236+
setup_values: vec![],
232237
}
233238
}
239+
240+
pub fn new_with_setup_values(
241+
builder: ExprBuilder,
242+
range_bus: VariableRangeCheckerBus,
243+
needs_setup: bool,
244+
setup_values: Vec<BigUint>,
245+
) -> Self {
246+
let mut ret = Self::new(builder, range_bus, needs_setup);
247+
ret.setup_values = setup_values;
248+
ret
249+
}
234250
}
235251

236252
impl Deref for FieldExpr {
@@ -290,6 +306,22 @@ impl<AB: InteractionBuilder> SubAir<AB> for FieldExpr {
290306
let is_setup = flags.iter().fold(is_valid.into(), |acc, &x| acc - x);
291307
builder.assert_bool(is_setup.clone());
292308
builder.when_first_row().assert_one(is_setup.clone());
309+
310+
/*
311+
for (lhs, rhs) in zip_eq(
312+
inputs.iter().flatten(),
313+
iter::empty().chain(self.builder.prime_limbs.clone()).chain(
314+
self.setup_values.iter().flat_map(|value| {
315+
big_uint_to_num_limbs(value, self.builder.limb_bits, self.builder.num_limbs)
316+
}),
317+
),
318+
) {
319+
builder
320+
.when(is_setup.clone())
321+
.assert_eq(*lhs, AB::F::from_canonical_usize(rhs));
322+
}
323+
*/
324+
293325
for i in 0..inputs[0].len().max(self.builder.prime_limbs.len()) {
294326
let lhs = if i < inputs[0].len() {
295327
inputs[0][i].into()

crates/circuits/mod-builder/src/core_chip.rs

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -286,24 +286,40 @@ where
286286
&self.air
287287
}
288288

289+
// TODO: add support to pad with setup row.
289290
fn finalize(&self, trace: &mut RowMajorMatrix<F>, num_records: usize) {
290291
if !self.should_finalize || num_records == 0 {
291292
return;
292293
}
293-
// We will copy over the core part of last row to padded rows (all rows after num_records).
294-
let core_width = <Self::Air as BaseAir<F>>::width(&self.air);
295-
let adapter_width = trace.width() - core_width;
296-
let last_row = trace
297-
.rows()
298-
.nth(num_records - 1)
299-
.unwrap()
300-
.collect::<Vec<_>>();
301-
let last_row_core = last_row.split_at(adapter_width).1;
302-
for row in trace.rows_mut().skip(num_records) {
303-
let core_row = row.split_at_mut(adapter_width).1;
304-
// The same as last row, except "is_valid" (the first element of core part) is zero.
305-
core_row.copy_from_slice(last_row_core);
306-
core_row[0] = F::ZERO;
294+
295+
if self.air.num_flags() == 0 {
296+
// We will copy over the core part of last row to padded rows (all rows after num_records).
297+
let core_width = <Self::Air as BaseAir<F>>::width(&self.air);
298+
let adapter_width = trace.width() - core_width;
299+
let last_row = trace
300+
.rows()
301+
.nth(num_records - 1)
302+
.unwrap()
303+
.collect::<Vec<_>>();
304+
let last_row_core = last_row.split_at(adapter_width).1;
305+
for row in trace.rows_mut().skip(num_records) {
306+
let core_row = row.split_at_mut(adapter_width).1;
307+
// The same as last row, except "is_valid" (the first element of core part) is zero.
308+
core_row.copy_from_slice(last_row_core);
309+
core_row[0] = F::ZERO;
310+
}
311+
} else {
312+
// We will copy over the core part of first row to padded rows (all rows after num_records).
313+
let core_width = <Self::Air as BaseAir<F>>::width(&self.air);
314+
let adapter_width = trace.width() - core_width;
315+
let first_row = trace.rows().nth(0).unwrap().collect::<Vec<_>>();
316+
let first_row_core = first_row.split_at(adapter_width).1;
317+
for row in trace.rows_mut().skip(num_records) {
318+
let core_row = row.split_at_mut(adapter_width).1;
319+
// The same as first row, except "is_valid" (the first element of core part) is zero.
320+
core_row.copy_from_slice(first_row_core);
321+
core_row[0] = F::ZERO;
322+
}
307323
}
308324
}
309325
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Twisted Edwards (te) curve operations

0 commit comments

Comments
 (0)