Skip to content
Snippets Groups Projects
Unverified Commit f51e08b6 authored by STEVAN Antoine's avatar STEVAN Antoine :crab:
Browse files

fix `field::split_data_into_field_elements`

parent eb29b154
No related branches found
No related tags found
No related merge requests found
......@@ -30,7 +30,7 @@ impl Shard {
_ => {
let alpha = E::ScalarField::from_le_bytes_mod_order(&u32_to_u8_vec(alpha));
let elements = field::split_data_into_field_elements::<E>(&self.bytes, 1)
let elements = field::split_data_into_field_elements::<E>(&self.bytes, 1, true)
.iter()
.map(|e| e.mul(alpha))
.collect::<Vec<_>>();
......@@ -66,8 +66,8 @@ impl Shard {
let alpha = E::ScalarField::from_le_bytes_mod_order(&u32_to_u8_vec(alpha));
let beta = E::ScalarField::from_le_bytes_mod_order(&u32_to_u8_vec(beta));
let elements_self = field::split_data_into_field_elements::<E>(&self.bytes, 1);
let elements_other = field::split_data_into_field_elements::<E>(&other.bytes, 1);
let elements_self = field::split_data_into_field_elements::<E>(&self.bytes, 1, true);
let elements_other = field::split_data_into_field_elements::<E>(&other.bytes, 1, true);
elements_self
.iter()
......
......@@ -11,10 +11,16 @@ use ark_std::One;
pub(crate) fn split_data_into_field_elements<E: Pairing>(
bytes: &[u8],
modulus: usize,
one_more: bool,
) -> Vec<E::ScalarField> {
let mut elements = Vec::new();
let bytes_per_element = if one_more {
(E::ScalarField::MODULUS_BIT_SIZE as usize) / 8 + 1
} else {
(E::ScalarField::MODULUS_BIT_SIZE as usize) / 8
};
for chunk in bytes.chunks((E::ScalarField::MODULUS_BIT_SIZE as usize) / 8 + 1) {
let mut elements = Vec::new();
for chunk in bytes.chunks(bytes_per_element) {
elements.push(E::ScalarField::from_le_bytes_mod_order(chunk));
}
......@@ -113,7 +119,7 @@ mod tests {
}
fn split_data_template<E: Pairing>(bytes: &[u8], modulus: usize, exact_length: Option<usize>) {
let elements = field::split_data_into_field_elements::<E>(bytes, modulus);
let elements = field::split_data_into_field_elements::<E>(bytes, modulus, false);
assert!(
elements.len() % modulus == 0,
"number of elements should be divisible by {}, found {}",
......
......@@ -96,7 +96,7 @@ where
info!("encoding and proving {} bytes", bytes.len());
debug!("splitting bytes into polynomials");
let elements = field::split_data_into_field_elements::<E>(bytes, k);
let elements = field::split_data_into_field_elements::<E>(bytes, k, false);
let nb_polynomials = elements.len() / k;
let polynomials = match field::build_interleaved_polynomials::<E, P>(&elements, nb_polynomials)
{
......@@ -148,7 +148,7 @@ where
P: DenseUVPolynomial<E::ScalarField, Point = E::ScalarField>,
for<'a, 'b> &'a P: Div<&'b P, Output = P>,
{
let elements = field::split_data_into_field_elements::<E>(&block.shard.bytes, 1);
let elements = field::split_data_into_field_elements::<E>(&block.shard.bytes, 1, true);
let polynomial = P::from_coefficients_vec(elements);
let (commit, _) = KZG10::<E, P>::commit(verifier_key, &polynomial, None, None)?;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment