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}