openvm_ecc_circuit/
config.rs

1use derive_more::derive::From;
2use openvm_algebra_circuit::*;
3use openvm_circuit::arch::{
4    SystemConfig, SystemExecutor, SystemPeriphery, VmChipComplex, VmConfig, VmInventoryError,
5};
6use openvm_circuit_derive::{AnyEnum, InstructionExecutor, VmConfig};
7use openvm_circuit_primitives_derive::{Chip, ChipUsageGetter};
8use openvm_rv32im_circuit::*;
9use openvm_stark_backend::p3_field::PrimeField32;
10use serde::{Deserialize, Serialize};
11
12use super::*;
13
14#[derive(Clone, Debug, VmConfig, Serialize, Deserialize)]
15pub struct Rv32WeierstrassConfig {
16    #[system]
17    pub system: SystemConfig,
18    #[extension]
19    pub base: Rv32I,
20    #[extension]
21    pub mul: Rv32M,
22    #[extension]
23    pub io: Rv32Io,
24    #[extension]
25    pub modular: ModularExtension,
26    #[extension]
27    pub weierstrass: WeierstrassExtension,
28}
29
30impl Rv32WeierstrassConfig {
31    pub fn new(curves: Vec<CurveConfig>) -> Self {
32        let primes: Vec<_> = curves
33            .iter()
34            .flat_map(|c| [c.modulus.clone(), c.scalar.clone()])
35            .collect();
36        Self {
37            system: SystemConfig::default().with_continuations(),
38            base: Default::default(),
39            mul: Default::default(),
40            io: Default::default(),
41            modular: ModularExtension::new(primes),
42            weierstrass: WeierstrassExtension::new(curves),
43        }
44    }
45}