use zkstd::common::{CurveAffine, Decode, Encode, Pairing, Vec};
use crate::{msm_curve_addition, Coefficients, Commitment};
#[derive(Clone, Debug, PartialEq, Decode, Encode, Default)]
pub struct CommitmentKey<C: CurveAffine> {
pub bases: Vec<C>,
}
impl<C: CurveAffine> CommitmentKey<C> {
pub fn trim(&self, truncated_degree: usize) -> Self {
Self {
bases: self.bases[..=truncated_degree].to_vec(),
}
}
pub fn commit(&self, coeffs: &Coefficients<C::Scalar>) -> Commitment<C> {
Commitment::new(msm_curve_addition(&self.bases, coeffs))
}
}
#[derive(Clone, Debug, Eq, Decode, Encode, PartialEq, Default)]
pub struct EvaluationKey<P: Pairing> {
pub g: P::G1Affine,
pub h: P::G2Affine,
pub beta_h: P::G2Affine,
pub prepared_h: P::G2PairngRepr,
pub prepared_beta_h: P::G2PairngRepr,
}
impl<P: Pairing> EvaluationKey<P> {
pub fn new(g: P::G1Affine, h: P::G2Affine, beta_h: P::G2Affine) -> Self {
let prepared_h = P::G2PairngRepr::from(h);
let prepared_beta_h = P::G2PairngRepr::from(beta_h);
Self {
g,
h,
beta_h,
prepared_h,
prepared_beta_h,
}
}
}