kimchi/circuits/
scalars.rs1use ark_ff::Field;
4use mina_poseidon::sponge::ScalarChallenge;
5
6#[derive(Clone, Debug)]
7pub struct RandomOracles<F: Field> {
8 pub joint_combiner: Option<(ScalarChallenge<F>, F)>,
9 pub beta: F,
10 pub gamma: F,
11 pub alpha_chal: ScalarChallenge<F>,
12 pub alpha: F,
13 pub zeta: F,
14 pub v: F,
15 pub u: F,
16 pub zeta_chal: ScalarChallenge<F>,
17 pub v_chal: ScalarChallenge<F>,
18 pub u_chal: ScalarChallenge<F>,
19}
20
21impl<F: Field> Default for RandomOracles<F> {
22 fn default() -> Self {
23 let c = ScalarChallenge(F::zero());
24 Self {
25 beta: F::zero(),
26 gamma: F::zero(),
27 alpha: F::zero(),
28 zeta: F::zero(),
29 v: F::zero(),
30 u: F::zero(),
31 alpha_chal: c.clone(),
32 zeta_chal: c.clone(),
33 v_chal: c.clone(),
34 u_chal: c,
35 joint_combiner: None,
36 }
37 }
38}
39
40#[cfg(feature = "ocaml_types")]
45pub mod caml {
46 use super::*;
47 use mina_poseidon::sponge::caml::CamlScalarChallenge;
48
49 #[derive(ocaml::IntoValue, ocaml::FromValue, ocaml_gen::Struct)]
54 pub struct CamlRandomOracles<CamlF> {
55 pub joint_combiner: Option<(CamlScalarChallenge<CamlF>, CamlF)>,
56 pub beta: CamlF,
57 pub gamma: CamlF,
58 pub alpha_chal: CamlScalarChallenge<CamlF>,
59 pub alpha: CamlF,
60 pub zeta: CamlF,
61 pub v: CamlF,
62 pub u: CamlF,
63 pub zeta_chal: CamlScalarChallenge<CamlF>,
64 pub v_chal: CamlScalarChallenge<CamlF>,
65 pub u_chal: CamlScalarChallenge<CamlF>,
66 }
67
68 impl<F, CamlF> From<RandomOracles<F>> for CamlRandomOracles<CamlF>
69 where
70 F: Field,
71 CamlF: From<F>,
72 {
73 fn from(ro: RandomOracles<F>) -> Self {
74 Self {
75 joint_combiner: ro.joint_combiner.map(|(l, r)| (l.into(), r.into())),
76 beta: ro.beta.into(),
77 gamma: ro.gamma.into(),
78 alpha_chal: ro.alpha_chal.into(),
79 alpha: ro.alpha.into(),
80 zeta: ro.zeta.into(),
81 v: ro.v.into(),
82 u: ro.u.into(),
83 zeta_chal: ro.zeta_chal.into(),
84 v_chal: ro.v_chal.into(),
85 u_chal: ro.u_chal.into(),
86 }
87 }
88 }
89
90 impl<F, CamlF> From<CamlRandomOracles<CamlF>> for RandomOracles<F>
91 where
92 CamlF: Into<F>,
93 F: Field,
94 {
95 fn from(caml_ro: CamlRandomOracles<CamlF>) -> Self {
96 RandomOracles {
97 joint_combiner: caml_ro.joint_combiner.map(|(l, r)| (l.into(), r.into())),
98 beta: caml_ro.beta.into(),
99 gamma: caml_ro.gamma.into(),
100 alpha_chal: caml_ro.alpha_chal.into(),
101 alpha: caml_ro.alpha.into(),
102 zeta: caml_ro.zeta.into(),
103 v: caml_ro.v.into(),
104 u: caml_ro.u.into(),
105 zeta_chal: caml_ro.zeta_chal.into(),
106 v_chal: caml_ro.v_chal.into(),
107 u_chal: caml_ro.u_chal.into(),
108 }
109 }
110 }
111}