1use zkstd::common::{CurveAffine, Decode, Encode, Pairing, Vec};
2
3use crate::{msm_curve_addition, Coefficients, Commitment};
4
5#[derive(Clone, Debug, PartialEq, Decode, Encode, Default)]
6pub struct CommitmentKey<C: CurveAffine> {
7 pub bases: Vec<C>,
8}
9
10impl<C: CurveAffine> CommitmentKey<C> {
11 pub fn trim(&self, truncated_degree: usize) -> Self {
12 Self {
13 bases: self.bases[..=truncated_degree].to_vec(),
14 }
15 }
16
17 pub fn commit(&self, coeffs: &Coefficients<C::Scalar>) -> Commitment<C> {
18 Commitment::new(msm_curve_addition(&self.bases, coeffs))
19 }
20}
21
22#[derive(Clone, Debug, Eq, Decode, Encode, PartialEq, Default)]
25pub struct EvaluationKey<P: Pairing> {
26 pub g: P::G1Affine,
28 pub h: P::G2Affine,
30 pub beta_h: P::G2Affine,
32 pub prepared_h: P::G2PairngRepr,
34 pub prepared_beta_h: P::G2PairngRepr,
36}
37
38impl<P: Pairing> EvaluationKey<P> {
39 pub fn new(g: P::G1Affine, h: P::G2Affine, beta_h: P::G2Affine) -> Self {
40 let prepared_h = P::G2PairngRepr::from(h);
41 let prepared_beta_h = P::G2PairngRepr::from(beta_h);
42 Self {
43 g,
44 h,
45 beta_h,
46 prepared_h,
47 prepared_beta_h,
48 }
49 }
50}