MCPcopy Create free account
hub / github.com/arkworks-rs/poly-commit / trim

Method trim

poly-commit/src/marlin/marlin_pc/mod.rs:80–169  ·  view source on GitHub ↗
(
        pp: &Self::UniversalParams,
        supported_degree: usize,
        supported_hiding_bound: usize,
        enforced_degree_bounds: Option<&[usize]>,
    )

Source from the content-addressed store, hash-verified

78 }
79
80 fn trim(
81 pp: &Self::UniversalParams,
82 supported_degree: usize,
83 supported_hiding_bound: usize,
84 enforced_degree_bounds: Option<&[usize]>,
85 ) -> Result<(Self::CommitterKey, Self::VerifierKey), Self::Error> {
86 let max_degree = pp.max_degree();
87 if supported_degree > max_degree {
88 return Err(Error::TrimmingDegreeTooLarge);
89 }
90
91 // Construct the KZG10 committer key for committing to unshifted polynomials.
92 let ck_time = start_timer!(|| format!(
93 "Constructing `powers` of size {} for unshifted polys",
94 supported_degree
95 ));
96 let powers = pp.powers_of_g[..=supported_degree].to_vec();
97 // We want to support making up to `supported_hiding_bound` queries to committed
98 // polynomials.
99 let powers_of_gamma_g = (0..=supported_hiding_bound + 1)
100 .map(|i| pp.powers_of_gamma_g[&i])
101 .collect::<Vec<_>>();
102
103 end_timer!(ck_time);
104
105 // Construct the core KZG10 verifier key.
106 let vk = kzg10::VerifierKey {
107 g: pp.powers_of_g[0].clone(),
108 gamma_g: pp.powers_of_gamma_g[&0],
109 h: pp.h.clone(),
110 beta_h: pp.beta_h.clone(),
111 prepared_h: pp.prepared_h.clone(),
112 prepared_beta_h: pp.prepared_beta_h.clone(),
113 };
114
115 let enforced_degree_bounds = enforced_degree_bounds.map(|v| {
116 let mut v = v.to_vec();
117 v.sort();
118 v.dedup();
119 v
120 });
121
122 // Check whether we have some degree bounds to enforce
123 let (shifted_powers, degree_bounds_and_shift_powers) =
124 if let Some(enforced_degree_bounds) = enforced_degree_bounds.as_ref() {
125 if enforced_degree_bounds.is_empty() {
126 (None, None)
127 } else {
128 let mut sorted_enforced_degree_bounds = enforced_degree_bounds.clone();
129 sorted_enforced_degree_bounds.sort();
130
131 let lowest_shifted_power = max_degree
132 - sorted_enforced_degree_bounds
133 .last()
134 .ok_or(Error::EmptyDegreeBounds)?;
135
136 let shifted_ck_time = start_timer!(|| format!(
137 "Constructing `shifted_powers` of size {}",

Callers

nothing calls this directly

Calls 3

is_emptyMethod · 0.80
iterMethod · 0.80
max_degreeMethod · 0.45

Tested by

no test coverage detected