From 656d096403eab3f30b03bda72c7057f585ee3adf Mon Sep 17 00:00:00 2001 From: Anders Konring Date: Fri, 23 Aug 2024 14:04:09 +0200 Subject: [PATCH] compute multiplicity --- vid/src/advz.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/vid/src/advz.rs b/vid/src/advz.rs index 0f43e7113..5b3a449c5 100644 --- a/vid/src/advz.rs +++ b/vid/src/advz.rs @@ -891,8 +891,26 @@ where } fn min_multiplicity(&self, payload_byte_len: u32, multiplicity: u32) -> u32 { - let _elem_bytes_len = bytes_to_field::elem_byte_capacity::<::ScalarField>(); - multiplicity + let elem_bytes_len = + bytes_to_field::elem_byte_capacity::<::ScalarField>() as u32; + let elems = payload_byte_len / elem_bytes_len; + let recovery_threshold = self.recovery_threshold; + if recovery_threshold * multiplicity < elems { + // payload is large. no change in multiplicity needed. + return multiplicity; + } + + // payload is small: choose m such that 0 < m < multiplicity + // and m is the power of two that fits the payload best. + let mut m = multiplicity; + loop { + if elems <= recovery_threshold * m { + break; + } else { + m >> 1; + } + } + m } /// Derive a commitment from whatever data is needed.