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

Method trim

poly-commit/src/sonic_pc/mod.rs:159–271  ·  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

157 }
158
159 fn trim(
160 pp: &Self::UniversalParams,
161 supported_degree: usize,
162 supported_hiding_bound: usize,
163 enforced_degree_bounds: Option<&[usize]>,
164 ) -> Result<(Self::CommitterKey, Self::VerifierKey), Self::Error> {
165 let trim_time = start_timer!(|| "Trimming public parameters");
166 let neg_powers_of_h = &pp.neg_powers_of_h;
167 let max_degree = pp.max_degree();
168 if supported_degree > max_degree {
169 return Err(Error::TrimmingDegreeTooLarge);
170 }
171
172 let enforced_degree_bounds = enforced_degree_bounds.map(|bounds| {
173 let mut v = bounds.to_vec();
174 v.sort();
175 v.dedup();
176 v
177 });
178
179 let (shifted_powers_of_g, shifted_powers_of_gamma_g, degree_bounds_and_neg_powers_of_h) =
180 if let Some(enforced_degree_bounds) = enforced_degree_bounds.as_ref() {
181 if enforced_degree_bounds.is_empty() {
182 (None, None, None)
183 } else {
184 let highest_enforced_degree_bound = *enforced_degree_bounds.last().unwrap();
185 if highest_enforced_degree_bound > supported_degree {
186 return Err(Error::UnsupportedDegreeBound(highest_enforced_degree_bound));
187 }
188
189 let lowest_shift_degree = max_degree - highest_enforced_degree_bound;
190
191 let shifted_ck_time = start_timer!(|| format!(
192 "Constructing `shifted_powers` of size {}",
193 max_degree - lowest_shift_degree + 1
194 ));
195
196 let shifted_powers_of_g = pp.powers_of_g[lowest_shift_degree..].to_vec();
197 let mut shifted_powers_of_gamma_g = BTreeMap::new();
198 // Also add degree 0.
199 for degree_bound in enforced_degree_bounds {
200 let shift_degree = max_degree - degree_bound;
201 let mut powers_for_degree_bound = vec![];
202 for i in 0..=(supported_hiding_bound + 1) {
203 // We have an additional degree in `powers_of_gamma_g` beyond `powers_of_g`.
204 if shift_degree + i < max_degree + 2 {
205 powers_for_degree_bound
206 .push(pp.powers_of_gamma_g[&(shift_degree + i)]);
207 }
208 }
209 shifted_powers_of_gamma_g.insert(*degree_bound, powers_for_degree_bound);
210 }
211
212 end_timer!(shifted_ck_time);
213
214 let neg_powers_of_h_time = start_timer!(|| format!(
215 "Constructing `neg_powers_of_h` of size {}",
216 enforced_degree_bounds.len()

Callers

nothing calls this directly

Calls 5

is_emptyMethod · 0.80
pushMethod · 0.80
insertMethod · 0.80
iterMethod · 0.80
max_degreeMethod · 0.45

Tested by

no test coverage detected