(
pp: &Self::UniversalParams,
supported_degree: usize,
supported_hiding_bound: usize,
enforced_degree_bounds: Option<&[usize]>,
)
| 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 {}", |
nothing calls this directly
no test coverage detected