openvm_algebra_circuit/
config.rs

1use num_bigint::BigUint;
2use openvm_circuit::arch::SystemConfig;
3use openvm_circuit_derive::VmConfig;
4use openvm_rv32im_circuit::*;
5use openvm_stark_backend::p3_field::PrimeField32;
6use serde::{Deserialize, Serialize};
7
8use super::*;
9
10#[derive(Clone, Debug, VmConfig, Serialize, Deserialize)]
11pub struct Rv32ModularConfig {
12    #[system]
13    pub system: SystemConfig,
14    #[extension]
15    pub base: Rv32I,
16    #[extension]
17    pub mul: Rv32M,
18    #[extension]
19    pub io: Rv32Io,
20    #[extension]
21    pub modular: ModularExtension,
22}
23
24impl Rv32ModularConfig {
25    pub fn new(moduli: Vec<BigUint>) -> Self {
26        Self {
27            system: SystemConfig::default().with_continuations(),
28            base: Default::default(),
29            mul: Default::default(),
30            io: Default::default(),
31            modular: ModularExtension::new(moduli),
32        }
33    }
34}
35
36#[derive(Clone, Debug, VmConfig, Serialize, Deserialize)]
37pub struct Rv32ModularWithFp2Config {
38    #[system]
39    pub system: SystemConfig,
40    #[extension]
41    pub base: Rv32I,
42    #[extension]
43    pub mul: Rv32M,
44    #[extension]
45    pub io: Rv32Io,
46    #[extension]
47    pub modular: ModularExtension,
48    #[extension]
49    pub fp2: Fp2Extension,
50}
51
52impl Rv32ModularWithFp2Config {
53    pub fn new(moduli: Vec<BigUint>) -> Self {
54        Self {
55            system: SystemConfig::default().with_continuations(),
56            base: Default::default(),
57            mul: Default::default(),
58            io: Default::default(),
59            modular: ModularExtension::new(moduli.clone()),
60            fp2: Fp2Extension::new(moduli),
61        }
62    }
63}