From 67e87b96bb6118be440caf15cb31eef31a865024 Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 28 Oct 2025 11:01:09 -0500 Subject: [PATCH 1/5] Apply alternate range check approach to Sum --- src/field.rs | 11 +++- src/flp/types.rs | 77 +++++++++++++------------ src/vdaf/mastic.rs | 2 + src/vdaf/test_vec/15/Prio3Sum_0.json | 6 +- src/vdaf/test_vec/15/Prio3Sum_1.json | 8 +-- src/vdaf/test_vec/15/Prio3Sum_2.json | 84 ++++++++++++++-------------- 6 files changed, 100 insertions(+), 88 deletions(-) diff --git a/src/field.rs b/src/field.rs index 215f092a1..754977d21 100644 --- a/src/field.rs +++ b/src/field.rs @@ -33,7 +33,9 @@ use std::{ Sub, SubAssign, }, }; -use subtle::{Choice, ConditionallyNegatable, ConditionallySelectable, ConstantTimeEq}; +use subtle::{ + Choice, ConditionallyNegatable, ConditionallySelectable, ConstantTimeEq, ConstantTimeLess, +}; #[cfg(feature = "experimental")] mod field255; @@ -219,7 +221,12 @@ pub trait Integer: /// use of the associated integer type. pub trait FieldElementWithInteger: FieldElement + From { /// The integer representation of a field element. - type Integer: Integer + From + Copy; + type Integer: Integer + + From + + Copy + + ConstantTimeEq + + ConstantTimeLess + + ConditionallySelectable; /// Modular exponentation, i.e., `self^exp (mod p)`. fn pow(&self, exp: Self::Integer) -> Self; diff --git a/src/flp/types.rs b/src/flp/types.rs index ca872b1f3..b2bcf3080 100644 --- a/src/flp/types.rs +++ b/src/flp/types.rs @@ -10,7 +10,7 @@ use std::convert::TryInto; use std::fmt::{self, Debug}; use std::marker::PhantomData; use std::slice; -use subtle::Choice; +use subtle::{Choice, ConditionallySelectable, ConstantTimeGreater}; #[cfg(feature = "experimental")] mod dp; @@ -132,9 +132,9 @@ impl Type for Count { #[derive(Clone, PartialEq, Eq)] pub struct Sum { max_measurement: F::Integer, + last_weight: F::Integer, + last_weight_field: F, - // Computed from max_measurement - offset: F::Integer, bits: usize, // Constant bit_range_checker: Vec, @@ -162,9 +162,8 @@ impl Sum { // Number of bits needed to represent x is ⌊log₂(x)⌋ + 1 let bits = max_measurement.checked_ilog2().unwrap() as usize + 1; - // The offset we add to the summand for range-checking purposes - let one = F::Integer::try_from(1).unwrap(); - let offset = (one << bits) - one - max_measurement; + let last_weight = max_measurement - ((F::Integer::one() << (bits - 1)) - F::Integer::one()); + let last_weight_field = F::from(last_weight); // Construct a range checker to ensure encoded bits are in the range [0, 2) let bit_range_checker = poly_range_check(0, 2); @@ -172,7 +171,8 @@ impl Sum { Ok(Self { bits, max_measurement, - offset, + last_weight, + last_weight_field, bit_range_checker, }) } @@ -184,7 +184,7 @@ impl Flp for Sum { fn gadget(&self) -> Vec>> { vec![Box::new(PolyEval::new( self.bit_range_checker.clone(), - 2 * self.bits, + self.bits, ))] } @@ -197,33 +197,24 @@ impl Flp for Sum { g: &mut Vec>>, input: &[F], joint_rand: &[F], - num_shares: usize, + _num_shares: usize, ) -> Result, FlpError> { self.valid_call_check(input, joint_rand)?; let gadget = &mut g[0]; - let mut output = vec![F::zero(); input.len() + 1]; + let mut output = vec![F::zero(); input.len()]; for (bit, output_elem) in input.iter().zip(output[..input.len()].iter_mut()) { *output_elem = gadget.call(slice::from_ref(bit))?; } - let range_check = { - let offset = F::from(self.offset); - let shares_inv = F::from(F::valid_integer_try_from(num_shares)?).inv(); - let sum = F::decode_bitvector(&input[..self.bits])?; - let sum_plus_offset = F::decode_bitvector(&input[self.bits..])?; - offset * shares_inv + sum - sum_plus_offset - }; - output[input.len()] = range_check; - Ok(output) } fn input_len(&self) -> usize { - 2 * self.bits + self.bits } fn proof_len(&self) -> usize { - 2 * ((1 + 2 * self.bits).next_power_of_two() - 1) + 2 + 2 * ((1 + self.bits).next_power_of_two() - 1) + 2 } fn verifier_len(&self) -> usize { @@ -235,7 +226,7 @@ impl Flp for Sum { } fn eval_output_len(&self) -> usize { - 2 * self.bits + 1 + self.bits } fn prove_rand_len(&self) -> usize { @@ -255,15 +246,21 @@ impl Type for Sum { ))); } - let enc_summand = F::encode_as_bitvector(*summand, self.bits)?; - let enc_summand_plus_offset = F::encode_as_bitvector(self.offset + *summand, self.bits)?; + let mut encoded = Vec::with_capacity(self.bits); + let threshold = (F::Integer::one() << (self.bits - 1)) - F::Integer::one(); + let high_bit = summand.ct_gt(&threshold); + let to_encode = *summand + - F::Integer::conditional_select(&F::Integer::zero(), &self.last_weight, high_bit); + encoded.extend(F::encode_as_bitvector(to_encode, self.bits - 1)?); + encoded.push(F::conditional_select(&F::zero(), &F::one(), high_bit)); - Ok(enc_summand.chain(enc_summand_plus_offset).collect()) + Ok(encoded) } fn truncate(&self, input: Vec) -> Result, FlpError> { self.truncate_call_check(&input)?; - let res = F::decode_bitvector(&input[..self.bits])?; + let mut res = F::decode_bitvector(&input[..self.bits - 1])?; + res += input[self.bits - 1] * self.last_weight_field; Ok(vec![res]) } @@ -1149,20 +1146,26 @@ mod tests { // Test FLP on invalid input, specifically on field elements outside of {0,1} { let sum = Sum::new((1 << 3) - 1).unwrap(); - // The sum+offset value can be whatever. The binariness test should fail first - let sum_plus_offset = vec![zero; 3]; - TypeTest::expect_invalid::<3>( - &sum, - &[&[one, nine, zero], sum_plus_offset.as_slice()].concat(), - ); + TypeTest::expect_invalid::<3>(&sum, &[one, nine, zero]); } { let sum = Sum::new((1 << 5) - 1).unwrap(); - let sum_plus_offset = vec![zero; 5]; - TypeTest::expect_invalid::<3>( - &sum, - &[&[zero, zero, zero, zero, nine], sum_plus_offset.as_slice()].concat(), - ); + TypeTest::expect_invalid::<3>(&sum, &[zero, zero, zero, zero, nine]); + } + } + + #[test] + fn test_sum_exhaustive() { + for max_measurement in [6, 7, 8, 9] { + let sum = Sum::new(max_measurement).unwrap(); + for measurement in 0..=max_measurement { + TypeTest::expect_valid::<2>( + &sum, + &sum.encode_measurement(&measurement).unwrap(), + &[TestField::from(measurement)], + ); + } + sum.encode_measurement(&(max_measurement + 1)).unwrap_err(); } } diff --git a/src/vdaf/mastic.rs b/src/vdaf/mastic.rs index 24fbb8de9..cd9b8f7a9 100644 --- a/src/vdaf/mastic.rs +++ b/src/vdaf/mastic.rs @@ -1615,6 +1615,7 @@ mod tests { } #[test] + #[ignore = "Test vector needs to be updated"] fn sum_0() { check_test_vec( 0xFFFF0002, @@ -1627,6 +1628,7 @@ mod tests { } #[test] + #[ignore = "Test vector needs to be updated"] fn sum_1() { check_test_vec( 0xFFFF0002, diff --git a/src/vdaf/test_vec/15/Prio3Sum_0.json b/src/vdaf/test_vec/15/Prio3Sum_0.json index f7edd47fb..d64b23938 100644 --- a/src/vdaf/test_vec/15/Prio3Sum_0.json +++ b/src/vdaf/test_vec/15/Prio3Sum_0.json @@ -63,7 +63,7 @@ "prep": [ { "input_shares": [ - "43126178225dca30c56c892f4cef3ca6f627cae360f77d4b2994ee7fbe779a5892f97897b3c5ff28eb1156127a87cb71feca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa2ab3bdc62c1db973fabd7f72169d6d5dbe73437837c1c0662bb24addf7e07e6ae56db956b47ccc755b7c35912f67fb1b50659e637f1034ee3214ff4916ea9d1298a119d0e44c922bd17cc333224c31e67dc3282b61b9aab42ca71062aea44000cf3d13d667e8223477604725e654230e2a7fe703f610869e9f65d5a00203af41da5120d8850de22994a3f5de88910257bf11730c7721c63d712f309ff1a16961a6870876f89b7aece0a7aae9726c957a3bbde29775ad0e4159e2cdfaa741f3f8562468e879f0f4e50829d16ade458e32e321f2b7ab80348c4fcd23a2aeb3921b4b6c297d0e0e10ba6ac3839d9be19018012dfcce38bfb12d0caefc81b0bf2901638317c0a708b0d73f45b43aaf7cc1f7eb7ea6bd7f8e1248ef49224f1735c8112e1f740fc7020d3185ed3c588611aa6aed0f49ac90d908e28213b754fc64e330998b132579ea55c4d5be49e026fcb6e962377d3d540fa2d45116efa46182b7175e29f95499362aa5b631a4b504c7289a7cbf673f2f9d0f0e224f37a862ae822b5359c93de1a40e52e142897dcf25ee5bfaf4132019c1ad28f128186fd48b49eeca0ba9c31e25a025e2d5999e2654a02b6d1bd07d2a2095045cbd367a00a2d34976dc10effb80228afb1c3a7f05943053d65bd900b7a4bfd3833a93f1e0c3c0ecc469d10fbc05ac7881c68f0e3229efdc0e7d15d08a63d9c6de25377f4e01bdc64748dcfc1381977f323cce3c0d453c6a97df87718f54f386228fa70b978c331be3c4af998645e68b00d1f95bb7fedd7", + "43126178225dca30c56c892f4cef3ca6f627cae360f77d4b2994ee7fbe779a5892f97897b3c5ff28eb1156127a87cb71feca3aa67f3f66472914077ef4bb3748b50659e637f1034e5c1d118fcb6c739d58ccc2918383dea67c60ff1d9b5e785ecea8973eaa609c353af5a3995fa4154859c9db0ce222932545a5bac90a693273c79cfbebc40fe8d424b23bfe6cc4ee20f83de4a6ef40ccee2b244ba10fc70120d0188faa4d8c9376b1fb8d85e4be516bbfa6169ebd8760456f5ecdcf1990c2ee9c898fcf1155b04a056d0aa6a55ee264a89e3bd5bc92158541166fee373dad274439d14c428eb32b85b95b97a667139f94ce2252763640d155c2c9f215156647790467a1c14a53d2c034e56221adcc9ebfcee83e2b29764dc5aa37e251c121eabf070687c6dba16f8e0da37b39b6f934125e0a72fb48e3455d2c1873192e9bd9", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ], "measurement": 100, @@ -77,8 +77,8 @@ ], "prep_shares": [ [ - "3930d34b74e6676f0158033969b58f5f113b356a799287a5", - "c8cf2cb48a199890ca5a3a856a34c034919f038dd5483648" + "c842b8f2c8da529d65a5afbb88321c9f55902f34cfdc0268", + "39bd470d3625ad6225728cde1d6730cca68c513022ee28ca" ] ], "public_share": "", diff --git a/src/vdaf/test_vec/15/Prio3Sum_1.json b/src/vdaf/test_vec/15/Prio3Sum_1.json index 17eb9e261..8607f4e50 100644 --- a/src/vdaf/test_vec/15/Prio3Sum_1.json +++ b/src/vdaf/test_vec/15/Prio3Sum_1.json @@ -82,7 +82,7 @@ "prep": [ { "input_shares": [ - "c7fb0bdef5bfe20176af571fbc49515389eaadd4df90c3529f06e993f24e7938e710c770d2dbd06f9b2523f00213f7baaa65475354cb73e7a5d9f889974b2e776e8b996484aeb62b04576947b5a96b0a72189f03c37c2a8309fee95bc15681c9115ee8147e871e4f1edb0ec1e56b68ad083182c17baa213f17a8d8624f21213c55a404746658fb100e1cb0a086315bbcba60c6e3ed3018ed8e7e837f2033bb8284a440d0822e5aaf2cc0dc43c6fc7f78a9a9b2471a4db243f8de37a30b6bcc6c8369f1c6d0c80cc096d25fff0aee3a6e2f9d6da165b01cfe2d7141caa00439e110b68fdd94556d1506ef1499cd969438d98b641f9c132ed547da7eab49dff9c0545f57abbf971f52ccd2e993781cd0cd2c8788b5279e5f70339731ac86ed9195cd3c60836b6dd9698fd1e4ad7050a698df611eee9c5ba98f10e6b64485d7c82bf48968aacfabf982c4b8d98196e25c276dd5e31ee61144266c66d2d2889047cf0b509d0e447e378c179bbd18386eb389c10cfc815ce724b01e47aafef1bb8e52753548f77626a0af40b75036ad6518e293284f82ccb28b4baa512c45276c2986908c87cc69c53f9ac7e0d6850ee756cd430745239b545552c8776d6bd3e2573415e89d96f6b4064456d4cdeb577f87eff828e008e6b1ec0b5943abef717959c0816e12f771fe4feac12ebf5eebb6a268182d25e08027a8dc01a81fbfff43b5604d034cb8d0ba775899a9b6e02bb5542e7ccbeaedf230cedfadf50a541b51281b4d85f67b6c8cfbe1b5e77f95b70053553d7686ee34f5bc6462a0121af4d61057bdea117ebc86fb37f8ac45955a6b73d7dfa2a193033b4524a106de810ac96c754ffc1e46b09c6310564f3a58cfcc123f9fc6d9a530bd16fcbfe45a0dd91b929f", + "c7fb0bdef5bfe20176af571fbc49515389eaadd4df90c3529f06e993f24e7938e710c770d2dbd06f9b2523f00213f7baaa65475354cb73e7a5d9f889974b2e7755a404746658fb10a97aa31605f82fe08b99c9ec3271ed400e1a809a8d132747dfb9e3985a776ec90c6181ccab8fcb0a35c10b673445a0695c1a6111db5516b85444b1b56845381a3335b858a1c961d691b2e5f2f46e5a1466236be222b570db46639ef80b74e6184431fe9ce5f9837fd346a650437b3afb637591adaa45d3cba46042d6a4665a26b8497a7e69536c0d2acf88b856d96d3b7578b882422b7c30234b297076d9a167b23d48a0fac77685a70e7d5125e60dad146344408c11235d3f0739f6abf2049e8e9d59b9c23af5e98e55c4697f3b3309ab47813ce1672eff05a97e3e3553f86b5d4f28a784336130618c5ea84e68df246fea3c3a5ee00e1b", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" ], @@ -98,9 +98,9 @@ ], "prep_shares": [ [ - "bc2b0bbf09338766f8abb2e591e5b779587a4647599932a2", - "c8cf2cb48a199890ca5a3a856a34c034919f038dd5483648", - "7d04c88c6ab3e008f1ee26ce020902b52a880fe76f72d29a" + "9e9b929d5679cbe426ecad2f26cf9409ad80d6e03a81c84c", + "39bd470d3625ad6225728cde1d6730cca68c513022ee28ca", + "2ba72555716187b886982eef646b9005fad669e572427207" ] ], "public_share": "", diff --git a/src/vdaf/test_vec/15/Prio3Sum_2.json b/src/vdaf/test_vec/15/Prio3Sum_2.json index 55f0a47fd..ad191c8e1 100644 --- a/src/vdaf/test_vec/15/Prio3Sum_2.json +++ b/src/vdaf/test_vec/15/Prio3Sum_2.json @@ -2,8 +2,8 @@ "agg_param": "", "agg_result": 1521, "agg_shares": [ - "3d90b1d19acf1386", - "b5754e2e6430ec79" + "3699c165fb00412a", + "bc6c3e9a03ffbed5" ], "ctx": "736f6d65206170706c69636174696f6e", "max_measurement": 1337, @@ -322,22 +322,22 @@ "prep": [ { "input_shares": [ - "43126178225dca30c56c892f4cef3ca6f527cae360f77d4b2994ee7fbe779a5892f97897b3c5ff28ea1156127a87cb71fdca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa1ab3bdc62c1db973fabd7f72169d6d5dce73437837c1c0662bb24addf7e07e6ad56db956b47ccc755b7c35912f67fb18ef8f9f52712c3080f914b74f00382004b165013481acf8be8175a22a882aa0eb80e78e0de28541108838a52471413dfb50659e637f1034e1f16577d02c362b788f2ba75655f48c3de2deca86d4c16dcb7ad16ee9be9abefb92edfc5ff3f936fb870dfe8d010e933b3d757755f70869463b12f0fee4391df94d8c3eaea71cb9eb448cebdcf1a9389aaffdf0add9c1ba4a3395ee3552988f68f846abd0d4c21d80797b31b3c093280a6dab8f6eb620cc224271c24a8e837b46c41d7448f92e8544b91b9258da94f10f9cc0c289acc1ca98e4921970f4645da92de8c4f01ceed91f67287a63c48f0efe31870630655eb8e771eae674a07d9208c92248153875c1a173ec6d0dbac7277d81f7d42fe00695163970bd22113a1fe897d45d0ae3ecd9232fc2f27cfe06c208fc152c37ff03f7daed0f49ac90d908eec2c33ecde71954dab2f085aff8226bc2d45c429c64678b147529367ef72e8e9ceac003b71c2dc01c96492eade00fc99ef01c7474f412e2526c2c5d54317487a37438dea9bd856781e92e0e296508b7e1d5f87e9e7df53669767fb7e72e5ae3ed7a009d3ee17a95cff7177086562e030875d1a518d2907983566800da114a280ee272902bcec631ed13e4e77f9aec2650667549603727f3fdd4dbb2476ec096b6b51ef2a4629889d8b8ad8018e594ce34bb030c6b68ccc6fc9db02c3a12a608eb01a1fbfbd64b152636ef87af0fb310d8ef8aae46ccbb794c59dd711cdda905e679f47c5fbad52209d211213c7f4111b38aa9f97c5f0c700", + "43126178225dca30c56c892f4cef3ca6f527cae360f77d4b2994ee7fbe779a5892f97897b3c5ff28ea1156127a87cb71fdca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa1ab3bdc62c1db97b50659e637f1034e2d9070e31062237aca01c1964a5fbf3887fb31f183326b12fd1f1e36202f284a376586974b0f21fd356b0500e85f759b82e2a932f5b182c2d821e002ce96d3a981e6fb80b77db54e8b24be7703da570de02f5dfc3b949f653724049ba0f1399736ec6ac73170ee9d8ceffbd3a790302921827837e46800b09c898fcf1155b04a34faaa516069328836693dd0f5b634f3367b3c1b4f69ba7315c24a55ccbf271789497999b9fc07eab82cf95e70f95d5b1985da892acc15f8687f828ab8c367fd630025e0d6f305712be80e6e1890ea2e109f258725f483a458fc90967376fb4e091dc639ec045d024515253c11401362aa086d0b50555d18", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ], "measurement": 0, "nonce": "000102030405060708090a0b0c0d0e0f", "out_shares": [ - "4a3136daf279c290", - "b7cec9250c863d6f" + "6932b80c1f204865", + "98cd47f3dfdfb79a" ], "prep_messages": [ "" ], "prep_shares": [ [ - "fc4370f72d35fb2151811ef413c956ff342b7195eb58731e", - "05bc8f08d1ca04de00af93b17bde18cbad698b7a7dd6d58d" + "ec0746ba0decfd4c7ae9d183a0f06a6890f0ab38147e97a0", + "15f8b945f11302b38483992fd8757f9d63ae26eb928dab6e" ] ], "public_share": "", @@ -345,22 +345,22 @@ }, { "input_shares": [ - "44126178225dca30c56c892f4cef3ca6f527cae360f77d4b2994ee7fbe779a5892f97897b3c5ff28ea1156127a87cb71fdca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa1ab3bdc62c1db9740abd7f72169d6d5dce73437837c1c0662bb24addf7e07e6ad56db956b47ccc755b7c35912f67fb18ef8f9f52712c3080f914b74f00382004b165013481acf8be8175a22a882aa0eb80e78e0de28541108838a52471413dfb50659e637f1034ea72dc76b211a70eb7fe9fdf23cf0bcce943e3cf677b2b53094dcd6fb6ac97ec4a05af004e87f92c6b406483756e68cb6325ddf6eb8da274f53ad4ca0581ebd88f82e66c767a58d0db89ff54c7319f5a2375a9f0d03890626247e02d2b5d3052be84c40b561eb5dbff61791c03271b92aef7f8973c1b2dd8bfd71a06e7d20198578a0d8ff103a4daae2f7ef838ba428d310c7e6f08dc4251b9ee657be8ff079b8ee17832393d334fc3f5254aec43a035d6944ba57c76d7ac9e02595222da66e469ad2edf1793434b1603d183b8fbb1d2699cf69935df52598abe65d9a0db52afbd1f1fc495705efe608118cda6d9e946349c54f32cea15eb2aed0f49ac90d908e6415c3fdbf1a8819b438c5dc27f2b1b0763474dcbce0d85c6923d35921931515e880effb8782ddaacdce299c592b5817707c3f4ef6d68c6a36c6a844d93c1cd1d2ecea0d20a594091a3bb953f35129659004c8e6c1f368e415235790133b310a7ed833db9a786c7510f199636efa58863eb849d4b7d935ce5c1bfcc2cbdcc0afe3c827473945ffc83bd81719fab3e9a2ef6c7acd0f7a76cdcdb084fdf541d58c0f18f956b423413341ab0bfa06673976c584e6d1f5733d3560d41b08bf8bca68a3da554e96b7d9bb1a6fa6103ded865ecd48be930dd7fa4d7d4e8549e1380762202b904b52e730ccc80cb65f2737ead77fa6a228763fa9cb", + "44126178225dca30c56c892f4cef3ca6f527cae360f77d4b2994ee7fbe779a5892f97897b3c5ff28ea1156127a87cb71fdca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa1ab3bdc62c1db97b50659e637f1034e3dbf50c54e103eddf64cf66566e287dccff889a53fc56296392385e799dd3b23aeac2bf7e4d7e6f8af2089342cff40a64d1dd17617ac920bcfaec062e09371d16844fcf68bccb81b57666988f853ad9197bfe5a78afec50972ae7d49394044e6b631a6c7aaac46ca094758ff756e83464cd42953d56b0e8f9c898fcf1155b04a24cbca6f22bb17250a1e0801da336c4fef7de46692d6c2efd9bee3a35211143e1202d439203442ee3e77752a2c5a92504d4ab34509d205af71f2a12aa6c6c9d57ca2246a02a502a460a6635d221695aa580f9ddbd7895d001e7217e8d927f1ff8ad78a3972c804d6c8bdc8104362c0447fb6bbef5e524f39", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ], "measurement": 1, "nonce": "000102030405060708090a0b0c0d0e0f", "out_shares": [ - "4b3136daf279c290", - "b7cec9250c863d6f" + "6a32b80c1f204865", + "98cd47f3dfdfb79a" ], "prep_messages": [ "" ], "prep_shares": [ [ - "fc4370f72d35fb211eb662209e58e2405d1a1b206c9f3fc5", - "05bc8f08d1ca04de00af93b17bde18cbad698b7a7dd6d58d" + "ec0746ba0decfd4c50082eb7b1202e71ba5422fef4d85e0a", + "15f8b945f11302b38483992fd8757f9d63ae26eb928dab6e" ] ], "public_share": "", @@ -368,22 +368,22 @@ }, { "input_shares": [ - "44126178225dca30c56c892f4cef3ca6f527cae360f77d4b2a94ee7fbe779a5893f97897b3c5ff28eb1156127a87cb71fdca3aa67f3f66472914077ef4bb37488345444045a2293f2c51f6d5d497646aa2ab3bdc62c1db9740abd7f72169d6d5dce73437837c1c0662bb24addf7e07e6ae56db956b47ccc756b7c35912f67fb18ff8f9f52712c3080f914b74f00382004b165013481acf8be9175a22a882aa0eb80e78e0de28541109838a52471413dfb50659e637f1034e4ea3f731bdcdb2d15cde40b82ae8b2f958cf9926b84d1f101b2aacba2766ca4f0211a744f01ad937622bca186d7448311074990955f2f6cdde5c72c7790e6c1950807b95f52c6638327753e1ffa6a80bcf15500c8d5dcee16ad2d9a8374b9dbbf4eb9fe829c7607f5301f9b7e4aace4447dc7eb670e39324605c593843aa1ca2a846e48361529f2ac54ff9e68652a1b4b5e81d20835332fc2f405d2586293bb2266a5659025590a010a73442884f49010e7f6f3a71dfc5936fe02415e08651a00f20b7f6ecdda5921f2c3d4a2c5fb6529036b0e54c25f2c52e13d722c7e29d2ec197666a44f8fea894e4bb0d47c340e5778ac90f3d6d5709aed0f49ac90d908ebd9f923724674533d74382173afabb85b2a316ac7c456f7de2d5fd9a64f6c98985ca38bc80e796391faaa7ba429d9c9c936585b358bfbdebaa16831db94c6d407b9bd53f911dbcdea0635bbf66c475fcf84817e8371fa128d0ce7fb990c399797239d4a7d29c69b5b307326cbcc0436ce55b549109a97f35f93043f90553bd92b2221cc3e92cad4858800eb6fe0571c14b4b439e19eb69ec3c577f96ff081493d7c5252145a2e58e70562b664352f3d1204a31ef4b02f26ad1198c150cabe70e2e8d8c49230e68da5b808101a049ee31d6e177411ea72e20f9210cc1280b942e2f85262b66f4200a3c39862c4e123e5650e1284b0874b074", + "44126178225dca30c66c892f4cef3ca6f627cae360f77d4b2a94ee7fbe779a5893f97897b3c5ff28eb1156127a87cb71feca3aa67f3f66472a14077ef4bb37488345444045a2293f2d51f6d5d497646aa2ab3bdc62c1db97b50659e637f1034ed9951206bede484ee2c202a8511634d738f97cab36a886eb8d9799e5d7c07cc65a4d2579c248bb22d48c02913722b053281740aeadb89f724d519ab100c0deab1b27d6ffb6b465fb74e00c142646b1d769791a14ef257732aa2f9e3dea595c9fb1e8209c4508d64e7fd3a71aeaabdc61db891a777a6ba6ab9c898fcf1155b04a88f4082fb3ec0cb41ea8fbbeeeffbf54867df1609bf39e9a864acfa5132ed39a6561dab743c36dc4190bfccd203723a37250440e73c5f847f34fc8db859a5cfbcabf4a61d6bc55c4432cc0d1f42391648755686f7262acd7e5f0f6f3290ed9468e201065d86c7551523179f5ce246729f000cbcbb952b71c", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ], "measurement": 1337, "nonce": "000102030405060708090a0b0c0d0e0f", "out_shares": [ - "833636daf279c290", - "b7cec9250c863d6f" + "a237b80c1f204865", + "98cd47f3dfdfb79a" ], "prep_messages": [ "" ], "prep_shares": [ [ - "fc4370f72d35fb21d1a2b4da13818ff19ae1da2daa52e440", - "05bc8f08d1ca04de00af93b17bde18cbad698b7a7dd6d58d" + "ec0746ba0decfd4ccecff0b615d9758d70194a10145e3fc8", + "15f8b945f11302b38483992fd8757f9d63ae26eb928dab6e" ] ], "public_share": "", @@ -391,22 +391,22 @@ }, { "input_shares": [ - "44126178225dca30c66c892f4cef3ca6f527cae360f77d4b2994ee7fbe779a5892f97897b3c5ff28eb1156127a87cb71feca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa1ab3bdc62c1db9740abd7f72169d6d5dbe73437837c1c0661bb24addf7e07e6ae56db956b47ccc755b7c35912f67fb18ff8f9f52712c3080e914b74f00382004a165013481acf8be9175a22a882aa0eb80e78e0de28541108838a52471413dfb50659e637f1034e2e45375c41717d1d236e9d21e14c017ce572e18159e66d4eb3dbc784f8d5abc618c775703bf481a0599570c8ceb21ce9d4ab6c6d423578fa1198c7d8a5c499db443c9d9bf0d159bd25689231e5676d85e579ce0c032e9418bcd1daf6f248e470b12101afcbee6af953382fe0e8ed45b45730df5fe92bebb2e5fe76d958ecb1ec6af571ab2275371c13488a57f0e44966f75bf52dbc97383a702a187d53f95aa7273000c599ab06bba08836d40c710a2d140f38ae642a38bbab722dfd95b361dbd10373448b601da441085f7fa5afe5eabe4ce2e4f921dddcf6311a3afb1c7f671a819380aa3aaff841b6e05d27348a3396e9a69fa7f02e9daed0f49ac90d908eddfd520da0c37ae70fb425ae84956d032500cf50dbac203f4a24e2d09386e81270146a90340eeed02940010be05ec8e4cf2db24f6b7c3cbf78db2d0c8c963f7e87dfb3399678c859ad721c6f8103b182e2e498e7c14edbf17ecf7e6bd5c552c4b50373e130755f3bb4d0fb43b77dccfcd607f4e78f6028a7748e2558f0102848f0738e9b280a155709887d459673c80f08d86b90e1a663aefb6cc43e3239f49dd6ff7bb5ad4b6f74e07429d4be3032a61aba687b58b77f439687832d557ed7d36ca9d0fb848bf0c83aa45fcc25f9be99a8cb454271aa43093203c9a9f3d0b2f5d79bf914ffb170ba8e6761dc6ea1f40732824bbb9cf0d8e0", + "44126178225dca30c66c892f4cef3ca6f527cae360f77d4b2994ee7fbe779a5892f97897b3c5ff28eb1156127a87cb71feca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa1ab3bdc62c1db97b50659e637f1034e6c4cf176091b8efab9c30dc993fad9d5126a04759d021056aef99da41da3220c62405012d3ca45099f62f04946cae7fa31cd1987824b4a804a438bfca4a58377b747a3ba8a44a51c206f2a2c8b1b40cb0c8d4f9b00d93d81ca85da3c885f2a6dc4cf82e9a2a589c9574859ad313a56d4eaa74d4a3c2b10f99c898fcf1155b04af53d2abe67b0c70747a7f09dac1b1a56ab0c6a973599153064e8cae6ce4b2d555d6eaf1e3341e3dd4f350e15118febfb699a6a359e324e3af55dd790e2b4b72f2d9f7da6032d16a3979da2b98f4e0271e44133e860afe588c59abaf48b080b797c39ae177acfc1d67bbcc7628696edb6e2e297f8f6924dcf", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ], "measurement": 99, "nonce": "000102030405060708090a0b0c0d0e0f", "out_shares": [ - "ad3136daf279c290", - "b7cec9250c863d6f" + "cc32b80c1f204865", + "98cd47f3dfdfb79a" ], "prep_messages": [ "" ], "prep_shares": [ [ - "fc4370f72d35fb21738306b80716f2e4c51acbcc0158dd8a", - "05bc8f08d1ca04de00af93b17bde18cbad698b7a7dd6d58d" + "ec0746ba0decfd4c000e11425c9aa3b0c9471fc53cc73377", + "15f8b945f11302b38483992fd8757f9d63ae26eb928dab6e" ] ], "public_share": "", @@ -414,22 +414,22 @@ }, { "input_shares": [ - "43126178225dca30c66c892f4cef3ca6f527cae360f77d4b2a94ee7fbe779a5892f97897b3c5ff28eb1156127a87cb71fdca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa1ab3bdc62c1db973fabd7f72169d6d5dbe73437837c1c0661bb24addf7e07e6ad56db956b47ccc756b7c35912f67fb18ff8f9f52712c3080f914b74f00382004b165013481acf8be8175a22a882aa0eb80e78e0de28541108838a52471413dfb50659e637f1034e6a39bfe3b1c5b6044408bc17a9684a3c18667bebbb630aa6fef4ccb832bd20d3c926cd7027dad49c10591913ff0ed8c3b77648981e143b75c377f97ca7ad0df4552fecfc97236770bb0a78e08c3aadd08948040da9f2180727ac0999c3b05f11766438b2bf602a6f17d9a978b17667a56daba815bfb4e1978db9ec3a1c118b311eb30dd8572d7015bcfcffe27b6643b377d38d5bf15eb72ab23051b008a16062bf867d586cd07168a115b887ba9970fe7fbf34858ac4c6e967cc9e2c72cdf43f5f4ca960e60585bce5f1ccf5073e49fafddc6cdb16573e9453415cbcdcbaed30c85793400e4962c27e27482776a443fde4e6ca5e373f7dbaaed0f49ac90d908ea009cb85306f4100ee1907b8bc792443f30c35e7772f84e7ff0add9c599f7306bfb4129048289bd4717c58c0b0020d0aeb62d624909d7944c6fbfb678aadcb6576ec64d8ee26bba617d036c0d93071373d1663e71c8a560312f54fc9055ed723f0c03bde3c03a0c5ef2f81abeff4aa0bc08c2a32bad731c2cbd3aff62dec4e033cb6f26ef351dc5d61d307ba09f2cec28860d362acdfe4bdb9668b0b7d91eee23ea9fe21db2604c7e0e7a7201008ccd4af096ca4321df114d92d12fe7964446fde609adf29e688b096baf155c36a5b8a693bbb4b5475e251d4f386271333442c29c5f9549ba3bdf052f6f9121f313b3ee48427fc0ca28ac3", + "43126178225dca30c66c892f4cef3ca6f527cae360f77d4b2a94ee7fbe779a5892f97897b3c5ff28eb1156127a87cb71fdca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa1ab3bdc62c1db97b50659e637f1034e5c1d118fcb6c739d5f6b642ca48d35760536019da6a8c6f4eaac6f41a398452f08c303bb9cd223859a76f8b3d531b630dcbeb400a0cba8f8d021e802d68ed3a9b0739c447288055a188e690d6500ce4a5d6a2ca05f0afb4f1cb15da62b63577c074ae8e28233f12dfafae6878c5a71be7b5e83fd8e8226ee9c898fcf1155b04a056d0aa6a55ee264a1ff993a9c88beb5b9406d6f2bf35e912835f94949560a32b7ebfb7569390562532106ab82271dc6bfa8cfbb7fb2efc1707f7a8ab0cb67fd3473841c1ce9b5659f7e63d8b56974f1936456e3017e28ba736f378be804de6938bf481e9b415a72d8093a882b76d2cc512c6245a43b37da", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ], "measurement": 42, "nonce": "000102030405060708090a0b0c0d0e0f", "out_shares": [ - "743136daf279c290", - "b7cec9250c863d6f" + "9332b80c1f204865", + "98cd47f3dfdfb79a" ], "prep_messages": [ "" ], "prep_shares": [ [ - "fc4370f72d35fb2167e02e21452d6637328672ffd0423630", - "05bc8f08d1ca04de00af93b17bde18cbad698b7a7dd6d58d" + "ec0746ba0decfd4cad57af8e090aa468b0bc47c43301ac62", + "15f8b945f11302b38483992fd8757f9d63ae26eb928dab6e" ] ], "public_share": "", @@ -437,22 +437,22 @@ }, { "input_shares": [ - "43126178225dca30c56c892f4cef3ca6f527cae360f77d4b2994ee7fbe779a5892f97897b3c5ff28ea1156127a87cb71fdca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa1ab3bdc62c1db973fabd7f72169d6d5dce73437837c1c0662bb24addf7e07e6ad56db956b47ccc755b7c35912f67fb18ef8f9f52712c3080f914b74f00382004b165013481acf8be8175a22a882aa0eb80e78e0de28541108838a52471413dfb50659e637f1034e1f16577d02c362b788f2ba75655f48c3de2deca86d4c16dcb7ad16ee9be9abefb92edfc5ff3f936fb870dfe8d010e933b3d757755f70869463b12f0fee4391df94d8c3eaea71cb9eb448cebdcf1a9389aaffdf0add9c1ba4a3395ee3552988f68f846abd0d4c21d80797b31b3c093280a6dab8f6eb620cc224271c24a8e837b46c41d7448f92e8544b91b9258da94f10f9cc0c289acc1ca98e4921970f4645da92de8c4f01ceed91f67287a63c48f0efe31870630655eb8e771eae674a07d9208c92248153875c1a173ec6d0dbac7277d81f7d42fe00695163970bd22113a1fe897d45d0ae3ecd9232fc2f27cfe06c208fc152c37ff03f7daed0f49ac90d908eec2c33ecde71954dab2f085aff8226bc2d45c429c64678b147529367ef72e8e9ceac003b71c2dc01c96492eade00fc99ef01c7474f412e2526c2c5d54317487a37438dea9bd856781e92e0e296508b7e1d5f87e9e7df53669767fb7e72e5ae3ed7a009d3ee17a95cff7177086562e030875d1a518d2907983566800da114a280ee272902bcec631ed13e4e77f9aec2650667549603727f3fdd4dbb2476ec096b6b51ef2a4629889d8b8ad8018e594ce34bb030c6b68ccc6fc9db02c3a12a608eb01a1fbfbd64b152636ef87af0fb310d8ef8aae46ccbb794c59dd711cdda905e679f47c5fbad52209d211213c7f4111b38aa9f97c5f0c700", + "43126178225dca30c56c892f4cef3ca6f527cae360f77d4b2994ee7fbe779a5892f97897b3c5ff28ea1156127a87cb71fdca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa1ab3bdc62c1db97b50659e637f1034e2d9070e31062237aca01c1964a5fbf3887fb31f183326b12fd1f1e36202f284a376586974b0f21fd356b0500e85f759b82e2a932f5b182c2d821e002ce96d3a981e6fb80b77db54e8b24be7703da570de02f5dfc3b949f653724049ba0f1399736ec6ac73170ee9d8ceffbd3a790302921827837e46800b09c898fcf1155b04a34faaa516069328836693dd0f5b634f3367b3c1b4f69ba7315c24a55ccbf271789497999b9fc07eab82cf95e70f95d5b1985da892acc15f8687f828ab8c367fd630025e0d6f305712be80e6e1890ea2e109f258725f483a458fc90967376fb4e091dc639ec045d024515253c11401362aa086d0b50555d18", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ], "measurement": 0, "nonce": "000102030405060708090a0b0c0d0e0f", "out_shares": [ - "4a3136daf279c290", - "b7cec9250c863d6f" + "6932b80c1f204865", + "98cd47f3dfdfb79a" ], "prep_messages": [ "" ], "prep_shares": [ [ - "fc4370f72d35fb2151811ef413c956ff342b7195eb58731e", - "05bc8f08d1ca04de00af93b17bde18cbad698b7a7dd6d58d" + "ec0746ba0decfd4c7ae9d183a0f06a6890f0ab38147e97a0", + "15f8b945f11302b38483992fd8757f9d63ae26eb928dab6e" ] ], "public_share": "", @@ -460,22 +460,22 @@ }, { "input_shares": [ - "43126178225dca30c56c892f4cef3ca6f527cae360f77d4b2994ee7fbe779a5892f97897b3c5ff28ea1156127a87cb71fdca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa1ab3bdc62c1db973fabd7f72169d6d5dce73437837c1c0662bb24addf7e07e6ad56db956b47ccc755b7c35912f67fb18ef8f9f52712c3080f914b74f00382004b165013481acf8be8175a22a882aa0eb80e78e0de28541108838a52471413dfb50659e637f1034e1f16577d02c362b788f2ba75655f48c3de2deca86d4c16dcb7ad16ee9be9abefb92edfc5ff3f936fb870dfe8d010e933b3d757755f70869463b12f0fee4391df94d8c3eaea71cb9eb448cebdcf1a9389aaffdf0add9c1ba4a3395ee3552988f68f846abd0d4c21d80797b31b3c093280a6dab8f6eb620cc224271c24a8e837b46c41d7448f92e8544b91b9258da94f10f9cc0c289acc1ca98e4921970f4645da92de8c4f01ceed91f67287a63c48f0efe31870630655eb8e771eae674a07d9208c92248153875c1a173ec6d0dbac7277d81f7d42fe00695163970bd22113a1fe897d45d0ae3ecd9232fc2f27cfe06c208fc152c37ff03f7daed0f49ac90d908eec2c33ecde71954dab2f085aff8226bc2d45c429c64678b147529367ef72e8e9ceac003b71c2dc01c96492eade00fc99ef01c7474f412e2526c2c5d54317487a37438dea9bd856781e92e0e296508b7e1d5f87e9e7df53669767fb7e72e5ae3ed7a009d3ee17a95cff7177086562e030875d1a518d2907983566800da114a280ee272902bcec631ed13e4e77f9aec2650667549603727f3fdd4dbb2476ec096b6b51ef2a4629889d8b8ad8018e594ce34bb030c6b68ccc6fc9db02c3a12a608eb01a1fbfbd64b152636ef87af0fb310d8ef8aae46ccbb794c59dd711cdda905e679f47c5fbad52209d211213c7f4111b38aa9f97c5f0c700", + "43126178225dca30c56c892f4cef3ca6f527cae360f77d4b2994ee7fbe779a5892f97897b3c5ff28ea1156127a87cb71fdca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa1ab3bdc62c1db97b50659e637f1034e2d9070e31062237aca01c1964a5fbf3887fb31f183326b12fd1f1e36202f284a376586974b0f21fd356b0500e85f759b82e2a932f5b182c2d821e002ce96d3a981e6fb80b77db54e8b24be7703da570de02f5dfc3b949f653724049ba0f1399736ec6ac73170ee9d8ceffbd3a790302921827837e46800b09c898fcf1155b04a34faaa516069328836693dd0f5b634f3367b3c1b4f69ba7315c24a55ccbf271789497999b9fc07eab82cf95e70f95d5b1985da892acc15f8687f828ab8c367fd630025e0d6f305712be80e6e1890ea2e109f258725f483a458fc90967376fb4e091dc639ec045d024515253c11401362aa086d0b50555d18", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ], "measurement": 0, "nonce": "000102030405060708090a0b0c0d0e0f", "out_shares": [ - "4a3136daf279c290", - "b7cec9250c863d6f" + "6932b80c1f204865", + "98cd47f3dfdfb79a" ], "prep_messages": [ "" ], "prep_shares": [ [ - "fc4370f72d35fb2151811ef413c956ff342b7195eb58731e", - "05bc8f08d1ca04de00af93b17bde18cbad698b7a7dd6d58d" + "ec0746ba0decfd4c7ae9d183a0f06a6890f0ab38147e97a0", + "15f8b945f11302b38483992fd8757f9d63ae26eb928dab6e" ] ], "public_share": "", @@ -483,22 +483,22 @@ }, { "input_shares": [ - "43126178225dca30c66c892f4cef3ca6f527cae360f77d4b2a94ee7fbe779a5892f97897b3c5ff28eb1156127a87cb71fdca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa1ab3bdc62c1db973fabd7f72169d6d5dbe73437837c1c0661bb24addf7e07e6ad56db956b47ccc756b7c35912f67fb18ff8f9f52712c3080f914b74f00382004b165013481acf8be8175a22a882aa0eb80e78e0de28541108838a52471413dfb50659e637f1034e6a39bfe3b1c5b6044408bc17a9684a3c18667bebbb630aa6fef4ccb832bd20d3c926cd7027dad49c10591913ff0ed8c3b77648981e143b75c377f97ca7ad0df4552fecfc97236770bb0a78e08c3aadd08948040da9f2180727ac0999c3b05f11766438b2bf602a6f17d9a978b17667a56daba815bfb4e1978db9ec3a1c118b311eb30dd8572d7015bcfcffe27b6643b377d38d5bf15eb72ab23051b008a16062bf867d586cd07168a115b887ba9970fe7fbf34858ac4c6e967cc9e2c72cdf43f5f4ca960e60585bce5f1ccf5073e49fafddc6cdb16573e9453415cbcdcbaed30c85793400e4962c27e27482776a443fde4e6ca5e373f7dbaaed0f49ac90d908ea009cb85306f4100ee1907b8bc792443f30c35e7772f84e7ff0add9c599f7306bfb4129048289bd4717c58c0b0020d0aeb62d624909d7944c6fbfb678aadcb6576ec64d8ee26bba617d036c0d93071373d1663e71c8a560312f54fc9055ed723f0c03bde3c03a0c5ef2f81abeff4aa0bc08c2a32bad731c2cbd3aff62dec4e033cb6f26ef351dc5d61d307ba09f2cec28860d362acdfe4bdb9668b0b7d91eee23ea9fe21db2604c7e0e7a7201008ccd4af096ca4321df114d92d12fe7964446fde609adf29e688b096baf155c36a5b8a693bbb4b5475e251d4f386271333442c29c5f9549ba3bdf052f6f9121f313b3ee48427fc0ca28ac3", + "43126178225dca30c66c892f4cef3ca6f527cae360f77d4b2a94ee7fbe779a5892f97897b3c5ff28eb1156127a87cb71fdca3aa67f3f66472914077ef4bb37488245444045a2293f2c51f6d5d497646aa1ab3bdc62c1db97b50659e637f1034e5c1d118fcb6c739d5f6b642ca48d35760536019da6a8c6f4eaac6f41a398452f08c303bb9cd223859a76f8b3d531b630dcbeb400a0cba8f8d021e802d68ed3a9b0739c447288055a188e690d6500ce4a5d6a2ca05f0afb4f1cb15da62b63577c074ae8e28233f12dfafae6878c5a71be7b5e83fd8e8226ee9c898fcf1155b04a056d0aa6a55ee264a1ff993a9c88beb5b9406d6f2bf35e912835f94949560a32b7ebfb7569390562532106ab82271dc6bfa8cfbb7fb2efc1707f7a8ab0cb67fd3473841c1ce9b5659f7e63d8b56974f1936456e3017e28ba736f378be804de6938bf481e9b415a72d8093a882b76d2cc512c6245a43b37da", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ], "measurement": 42, "nonce": "000102030405060708090a0b0c0d0e0f", "out_shares": [ - "743136daf279c290", - "b7cec9250c863d6f" + "9332b80c1f204865", + "98cd47f3dfdfb79a" ], "prep_messages": [ "" ], "prep_shares": [ [ - "fc4370f72d35fb2167e02e21452d6637328672ffd0423630", - "05bc8f08d1ca04de00af93b17bde18cbad698b7a7dd6d58d" + "ec0746ba0decfd4cad57af8e090aa468b0bc47c43301ac62", + "15f8b945f11302b38483992fd8757f9d63ae26eb928dab6e" ] ], "public_share": "", From 8a43e250b30c526a73364f1478aa3e7810a4ff3e Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 28 Oct 2025 11:58:11 -0500 Subject: [PATCH 2/5] Refactor encoding/decoding into helper functions --- src/flp/types.rs | 59 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 11 deletions(-) diff --git a/src/flp/types.rs b/src/flp/types.rs index b2bcf3080..d7aa164e3 100644 --- a/src/flp/types.rs +++ b/src/flp/types.rs @@ -2,7 +2,7 @@ //! A collection of [`Type`] implementations. -use crate::field::{FieldElementWithIntegerExt, Integer, NttFriendlyFieldElement}; +use crate::field::{FieldElementWithIntegerExt, FieldError, Integer, NttFriendlyFieldElement}; use crate::flp::gadgets::{Mul, ParallelSumGadget, PolyEval}; use crate::flp::{Flp, FlpError, Gadget, Type}; use crate::polynomial::poly_range_check; @@ -247,21 +247,16 @@ impl Type for Sum { } let mut encoded = Vec::with_capacity(self.bits); - let threshold = (F::Integer::one() << (self.bits - 1)) - F::Integer::one(); - let high_bit = summand.ct_gt(&threshold); - let to_encode = *summand - - F::Integer::conditional_select(&F::Integer::zero(), &self.last_weight, high_bit); - encoded.extend(F::encode_as_bitvector(to_encode, self.bits - 1)?); - encoded.push(F::conditional_select(&F::zero(), &F::one(), high_bit)); - + encode_range_checked_int(*summand, self.bits, self.last_weight, &mut encoded)?; Ok(encoded) } fn truncate(&self, input: Vec) -> Result, FlpError> { self.truncate_call_check(&input)?; - let mut res = F::decode_bitvector(&input[..self.bits - 1])?; - res += input[self.bits - 1] * self.last_weight_field; - Ok(vec![res]) + Ok(vec![decode_range_checked_int( + &input, + self.last_weight_field, + )?]) } fn decode_result(&self, data: &[F], _num_measurements: usize) -> Result { @@ -1054,6 +1049,48 @@ pub(crate) fn parallel_sum_range_checks( Ok(output) } +/// Encodes an integer into multiple field elements with values of 0 or 1. +/// +/// This function implements the encoding scheme from the Sum circuit and others. It uses a modified +/// bit vector encoding method, where the weight of the last field element may be any value, not +/// necessarily a power of two. This means some numbers may have multiple possible representations, +/// but all possible bit vectors will decode into the desired range. +/// +/// # Arguments +/// +/// * `value`: Integer to be encoded. +/// * `bits`: Length of field element vector. +/// * `last_weight`: Weight of the last field element. This can be chosen to determine the range of +/// encodable values. +/// * `out`: Output vector. Field elements will be appended to this. +fn encode_range_checked_int( + value: F::Integer, + bits: usize, + last_weight: F::Integer, + out: &mut Vec, +) -> Result<(), FieldError> { + let threshold = (F::Integer::one() << (bits - 1)) - F::Integer::one(); + let high_bit = value.ct_gt(&threshold); + let to_encode = + value - F::Integer::conditional_select(&F::Integer::zero(), &last_weight, high_bit); + out.extend(F::encode_as_bitvector(to_encode, bits - 1)?); + out.push(F::conditional_select(&F::zero(), &F::one(), high_bit)); + Ok(()) +} + +/// Decodes an integer from a vector of field elements produced by [encode_range_checked_int]. +/// +/// Note that this is a linear function, and thus it can be applied to secret shared field elements. +fn decode_range_checked_int( + input: &[F], + last_weight: F, +) -> Result { + let Some((last, rest)) = input.split_last() else { + return Ok(F::zero()); + }; + Ok(F::decode_bitvector(rest)? + *last * last_weight) +} + #[cfg(test)] mod tests { use super::*; From a69ef730846d25c5faa35799739dfc4e80cad1bd Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 28 Oct 2025 14:55:46 -0500 Subject: [PATCH 3/5] Make SumVec range check more flexible --- src/flp/types.rs | 93 ++++++++++++------- src/flp/types/dp.rs | 2 +- src/vdaf/mastic.rs | 15 +-- src/vdaf/mastic/szk.rs | 8 +- src/vdaf/prio3.rs | 26 +++--- src/vdaf/prio3_test.rs | 15 ++- .../15/Prio3SumVecWithMultiproof_0.json | 2 +- .../15/Prio3SumVecWithMultiproof_1.json | 2 +- src/vdaf/test_vec/15/Prio3SumVec_0.json | 2 +- src/vdaf/test_vec/15/Prio3SumVec_1.json | 62 ++++++------- 10 files changed, 129 insertions(+), 98 deletions(-) diff --git a/src/flp/types.rs b/src/flp/types.rs index d7aa164e3..d380c8fab 100644 --- a/src/flp/types.rs +++ b/src/flp/types.rs @@ -761,16 +761,19 @@ where } } -/// A sequence of integers in range `[0, 2^bits)`. This type uses a neat trick from [[BBCG+19], -/// Corollary 4.9] to reduce the proof size to roughly the square root of the input size. +/// A sequence of integers in the range `[0, max_measurement]`. This type uses a neat trick from +/// [[BBCG+19], Corollary 4.9] to reduce the proof size to roughly the square root of the input +/// size. /// /// [BBCG+19]: https://eprint.iacr.org/2019/188 #[derive(PartialEq, Eq)] pub struct SumVec { len: usize, bits: usize, + max_measurement: F::Integer, + last_weight: F::Integer, + last_weight_field: F, flattened_len: usize, - max: F::Integer, chunk_length: usize, gadget_calls: usize, phantom: PhantomData, @@ -780,6 +783,7 @@ impl Debug for SumVec { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("SumVec") .field("len", &self.len) + .field("max_measurement", &self.max_measurement) .field("bits", &self.bits) .field("chunk_length", &self.chunk_length) .finish() @@ -791,29 +795,36 @@ impl>> SumVec { /// /// # Errors /// - /// * The length of the encoded measurement, i.e., `bits * len`, overflows addressable memory. - /// * The bit width cannot be encoded, i.e., `bits` is larger than or equal to the number of - /// bits required to encode field elements. - /// * Any of `bits`, `len`, or `chunk_length` are zero. - pub fn new(bits: usize, len: usize, chunk_length: usize) -> Result { + /// * The measurements cannot be encoded, i.e., `max_measurement` is larger than or equal to the + /// field's modulus. + /// * Any of `max_measurement`, `len`, or `chunk_length` are zero. + /// * The length of the encoded measurement, i.e., `len` times the number of bits needed to + /// represent `max_measurement`, overflows addressable memory. + pub fn new( + max_measurement: F::Integer, + len: usize, + chunk_length: usize, + ) -> Result { + // Nubmer of bits needed to represent each element of the measurement. + let bits = max_measurement.checked_ilog2().unwrap() as usize + 1; + let flattened_len = bits.checked_mul(len).ok_or_else(|| { FlpError::InvalidParameter("`bits*len` overflows addressable memory".into()) })?; - // Check if the bit width is too large. This limit is defined to be one bit less than the - // number of bits required to encode `F::Integer`. (One less so that we can compute `1 << - // bits` without overflowing.) - let limit = std::mem::size_of::() * 8 - 1; - if bits > limit { - return Err(FlpError::InvalidParameter(format!( - "bit width exceeds limit of {limit}" - ))); + let last_weight = max_measurement - ((F::Integer::one() << (bits - 1)) - F::Integer::one()); + let last_weight_field = F::from(last_weight); + + if max_measurement >= F::modulus() { + return Err(FlpError::InvalidParameter( + "max_measurement exceeds field modulus".to_string(), + )); } // Check for degenerate parameters. - if bits == 0 { + if max_measurement == F::Integer::zero() { return Err(FlpError::InvalidParameter( - "bits cannot be zero".to_string(), + "max_measurement cannot be zero".to_string(), )); } if len == 0 { @@ -825,10 +836,6 @@ impl>> SumVec { )); } - // Compute the largest encodable measurement. - let one = F::Integer::from(F::one()); - let max = (one << bits) - one; - let mut gadget_calls = flattened_len / chunk_length; if flattened_len % chunk_length != 0 { gadget_calls += 1; @@ -837,8 +844,10 @@ impl>> SumVec { Ok(Self { len, bits, + max_measurement, + last_weight, + last_weight_field, flattened_len, - max, chunk_length, gadget_calls, phantom: PhantomData, @@ -851,8 +860,10 @@ impl Clone for SumVec { Self { len: self.len, bits: self.bits, + max_measurement: self.max_measurement, + last_weight: self.last_weight, + last_weight_field: self.last_weight_field, flattened_len: self.flattened_len, - max: self.max, chunk_length: self.chunk_length, gadget_calls: self.gadget_calls, phantom: PhantomData, @@ -935,13 +946,7 @@ where let mut flattened = Vec::with_capacity(self.flattened_len); for summand in measurement.iter() { - if summand > &self.max { - return Err(FlpError::Encode(format!( - "summand exceeds maximum of 2^{}-1", - self.bits - ))); - } - flattened.extend(F::encode_as_bitvector(*summand, self.bits)?); + encode_range_checked_int(*summand, self.bits, self.last_weight, &mut flattened)?; } Ok(flattened) @@ -951,7 +956,7 @@ where self.truncate_call_check(&input)?; let mut unflattened = Vec::with_capacity(self.len); for chunk in input.chunks(self.bits) { - unflattened.push(F::decode_bitvector(chunk)?); + unflattened.push(decode_range_checked_int(chunk, self.last_weight_field)?); } Ok(unflattened) } @@ -1422,7 +1427,7 @@ mod tests { fn test_sum_vec(f: F) where - F: Fn(usize, usize, usize) -> Result, FlpError>, + F: Fn(u64, usize, usize) -> Result, FlpError>, S: 'static + ParallelSumGadget> + Eq, { let one = TestField::one(); @@ -1447,7 +1452,7 @@ mod tests { ); let len = 23; - let sum_vec = f(4, len, 4).unwrap(); + let sum_vec = f(15, len, 4).unwrap(); TypeTest::expect_valid::<3>( &sum_vec, &sum_vec.encode_measurement(&vec![9; len]).unwrap(), @@ -1462,7 +1467,7 @@ mod tests { } let len = 23; - let sum_vec = f(2, len, 4).unwrap(); + let sum_vec = f(3, len, 4).unwrap(); TypeTest::expect_invalid::<3>(&sum_vec, &vec![nine; 2 * len]); // Round trip @@ -1478,6 +1483,24 @@ mod tests { .unwrap(), want ); + + // Test range check edge cases. + for max_measurement in [6, 7, 8, 9] { + let sum_vec = f(max_measurement, 3, 5).unwrap(); + for value in 0..=max_measurement { + let measurement = vec![value, 0, value]; + let output = vec![ + TestField::from(value), + TestField::zero(), + TestField::from(value), + ]; + TypeTest::expect_valid::<2>( + &sum_vec, + &sum_vec.encode_measurement(&measurement).unwrap(), + &output, + ); + } + } } #[test] diff --git a/src/flp/types/dp.rs b/src/flp/types/dp.rs index 9452fcf96..9d96fe554 100644 --- a/src/flp/types/dp.rs +++ b/src/flp/types/dp.rs @@ -260,7 +260,7 @@ mod tests { .try_into() .unwrap(); - let sumvec: SumVec<_, ParallelSum<_, _>> = SumVec::new(2, SIZE, 1).unwrap(); + let sumvec: SumVec<_, ParallelSum<_, _>> = SumVec::new(3, SIZE, 1).unwrap(); sumvec .add_noise(&dp_strategy, &mut share1, &mut rng) .unwrap(); diff --git a/src/vdaf/mastic.rs b/src/vdaf/mastic.rs index cd9b8f7a9..46e8e0506 100644 --- a/src/vdaf/mastic.rs +++ b/src/vdaf/mastic.rs @@ -1071,7 +1071,7 @@ mod tests { fn test_mastic_sumvec() { let algorithm_id = 6; let sumvec = - SumVec::>>::new(5, 3, 3).unwrap(); + SumVec::>>::new(31, 3, 3).unwrap(); let mastic = Mastic::new(algorithm_id, sumvec, 32).unwrap(); let mut nonce = [0u8; 16]; @@ -1158,7 +1158,7 @@ mod tests { fn test_input_share_encode_sumvec() { let algorithm_id = 6; let sumvec = - SumVec::>>::new(5, 3, 3).unwrap(); + SumVec::>>::new(31, 3, 3).unwrap(); let measurement = vec![1, 16, 0]; let mastic = Mastic::new(algorithm_id, sumvec, 32).unwrap(); @@ -1187,7 +1187,7 @@ mod tests { fn test_input_share_roundtrip_sumvec() { let algorithm_id = 6; let sumvec = - SumVec::>>::new(5, 3, 3).unwrap(); + SumVec::>>::new(31, 3, 3).unwrap(); let measurement = vec![1, 16, 0]; let mastic = Mastic::new(algorithm_id, sumvec, 32).unwrap(); @@ -1218,7 +1218,7 @@ mod tests { fn test_public_share_encode_sumvec() { let algorithm_id = 6; let sumvec = - SumVec::>>::new(5, 3, 3).unwrap(); + SumVec::>>::new(31, 3, 3).unwrap(); let measurement = vec![1, 16, 0]; let mastic = Mastic::new(algorithm_id, sumvec, 32).unwrap(); @@ -1241,7 +1241,7 @@ mod tests { fn test_public_share_roundtrip_sumvec() { let algorithm_id = 6; let sumvec = - SumVec::>>::new(5, 3, 3).unwrap(); + SumVec::>>::new(31, 3, 3).unwrap(); let measurement = vec![1, 16, 0]; let mastic = Mastic::new(algorithm_id, sumvec, 32).unwrap(); @@ -1641,15 +1641,16 @@ mod tests { } #[test] + #[ignore = "Test vector needs to be updated"] fn sum_vec_0() { check_test_vec( 0xFFFF0003, |type_params| { - let bits = type_params["bits"].as_u64().unwrap() as usize; + let max_measurement = type_params["max_measurement"].as_u64().unwrap() as u128; let length = type_params["length"].as_u64().unwrap() as usize; let chunk_length = type_params["chunk_length"].as_u64().unwrap() as usize; SumVec::>>::new( - bits, + max_measurement, length, chunk_length, ) diff --git a/src/vdaf/mastic/szk.rs b/src/vdaf/mastic/szk.rs index 5b3fb7889..463bb314d 100644 --- a/src/vdaf/mastic/szk.rs +++ b/src/vdaf/mastic/szk.rs @@ -869,7 +869,7 @@ mod tests { let mut nonce = [0u8; 16]; rng.fill(&mut nonce[..]); let sumvec = - SumVec::>>::new(5, 3, 3).unwrap(); + SumVec::>>::new(31, 3, 3).unwrap(); let encoded_measurement = sumvec.encode_measurement(&vec![1, 16, 0]).unwrap(); let szk_typ = Szk::new(sumvec, 0); let prove_rand_seed = rng.random(); @@ -1094,7 +1094,7 @@ mod tests { let mut nonce = [0u8; 16]; rng.fill(&mut nonce[..]); let sumvec = - SumVec::>>::new(5, 3, 3).unwrap(); + SumVec::>>::new(31, 3, 3).unwrap(); let encoded_measurement = sumvec.encode_measurement(&vec![1, 16, 0]).unwrap(); let szk_typ = Szk::new(sumvec, 0); let prove_rand_seed = rng.random(); @@ -1134,7 +1134,7 @@ mod tests { let mut nonce = [0u8; 16]; rng.fill(&mut nonce[..]); let sumvec = - SumVec::>>::new(5, 3, 3).unwrap(); + SumVec::>>::new(31, 3, 3).unwrap(); let encoded_measurement = sumvec.encode_measurement(&vec![1, 16, 0]).unwrap(); let szk_typ = Szk::new(sumvec, 0); let prove_rand_seed = rng.random(); @@ -1183,7 +1183,7 @@ mod tests { #[test] fn test_sumvec() { let sumvec = - SumVec::>>::new(5, 3, 3).unwrap(); + SumVec::>>::new(31, 3, 3).unwrap(); let five = Field128::from(5); let encoded_measurement = sumvec.encode_measurement(&vec![1, 16, 0]).unwrap(); diff --git a/src/vdaf/prio3.rs b/src/vdaf/prio3.rs index df17a67c1..1e36c4254 100644 --- a/src/vdaf/prio3.rs +++ b/src/vdaf/prio3.rs @@ -94,18 +94,18 @@ impl Prio3Count { } } -/// The count-vector type. Each measurement is a vector of integers in `[0,2^bits)` and the +/// The count-vector type. Each measurement is a vector of integers in `[0, max_measurement]` and the /// aggregate is the element-wise sum. pub type Prio3SumVec = Prio3>>, XofTurboShake128, 32>; impl Prio3SumVec { - /// Construct an instance of Prio3SumVec with the given number of aggregators. `bits` defines - /// the bit width of each summand of the measurement; `len` defines the length of the - /// measurement vector. + /// Construct an instance of Prio3SumVec with the given number of aggregators. `max_measurement` + /// defines the maximum value of each element of the measurement vector; `len` defines the + /// length of the measurement vector. pub fn new_sum_vec( num_aggregators: u8, - bits: usize, + max_measurement: u128, len: usize, chunk_length: usize, ) -> Result { @@ -113,7 +113,7 @@ impl Prio3SumVec { num_aggregators, 1, 0x00000003, - SumVec::new(bits, len, chunk_length)?, + SumVec::new(max_measurement, len, chunk_length)?, ) } } @@ -131,11 +131,11 @@ pub type Prio3SumVecMultithreaded = Prio3< #[cfg(feature = "multithreaded")] impl Prio3SumVecMultithreaded { /// Construct an instance of Prio3SumVecMultithreaded with the given number of - /// aggregators. `bits` defines the bit width of each summand of the measurement; `len` defines - /// the length of the measurement vector. + /// aggregators. `max_measurement` defines the maximum value of each element of the measurement + /// vector; `len` defines the length of the measurement vector. pub fn new_sum_vec_multithreaded( num_aggregators: u8, - bits: usize, + max_measurement: u128, len: usize, chunk_length: usize, ) -> Result { @@ -143,7 +143,7 @@ impl Prio3SumVecMultithreaded { num_aggregators, 1, 0x00000003, - SumVec::new(bits, len, chunk_length)?, + SumVec::new(max_measurement, len, chunk_length)?, ) } } @@ -1894,7 +1894,7 @@ mod tests { #[test] fn test_prio3_sum_vec() { - let prio3 = Prio3::new_sum_vec(2, 2, 20, 4).unwrap(); + let prio3 = Prio3::new_sum_vec(2, 3, 20, 4).unwrap(); assert_eq!( run_vdaf( CTX_STR, @@ -1917,7 +1917,7 @@ mod tests { SumVec>>, XofTurboShake128, 32, - >::new(2, 2, 0xFFFF0000, SumVec::new(2, 20, 4).unwrap()) + >::new(2, 2, 0xFFFF0000, SumVec::new(3, 20, 4).unwrap()) .unwrap(); assert_eq!( @@ -1939,7 +1939,7 @@ mod tests { #[test] #[cfg(feature = "multithreaded")] fn test_prio3_sum_vec_multithreaded() { - let prio3 = Prio3::new_sum_vec_multithreaded(2, 2, 20, 4).unwrap(); + let prio3 = Prio3::new_sum_vec_multithreaded(2, 3, 20, 4).unwrap(); assert_eq!( run_vdaf( CTX_STR, diff --git a/src/vdaf/prio3_test.rs b/src/vdaf/prio3_test.rs index adb3e4c96..987bc7758 100644 --- a/src/vdaf/prio3_test.rs +++ b/src/vdaf/prio3_test.rs @@ -55,14 +55,17 @@ where P: Xof, { fn new(shares: u8, parameters: &HashMap) -> Self { - let bits = parameters["bits"].as_u64().unwrap().try_into().unwrap(); + let max_measurement = usize::try_from(parameters["max_measurement"].as_u64().unwrap()) + .unwrap() + .try_into() + .unwrap(); let length = parameters["length"].as_u64().unwrap().try_into().unwrap(); let chunk_length = parameters["chunk_length"] .as_u64() .unwrap() .try_into() .unwrap(); - let sum_vec = SumVec::new(bits, length, chunk_length).unwrap(); + let sum_vec = SumVec::new(max_measurement, length, chunk_length).unwrap(); Prio3::new(shares, 1, 0x00000003, sum_vec).unwrap() } @@ -271,14 +274,18 @@ mod tests { check_test_vector_custom_constructor::( &test_vector, |shares, parameters| { - let bits = parameters["bits"].as_u64().unwrap().try_into().unwrap(); + let max_measurement = + usize::try_from(parameters["max_measurement"].as_u64().unwrap()) + .unwrap() + .try_into() + .unwrap(); let length = parameters["length"].as_u64().unwrap().try_into().unwrap(); let chunk_length = parameters["chunk_length"] .as_u64() .unwrap() .try_into() .unwrap(); - let sum_vec = SumVec::new(bits, length, chunk_length).unwrap(); + let sum_vec = SumVec::new(max_measurement, length, chunk_length).unwrap(); Prio3::new(shares, num_proofs, alg_id, sum_vec).unwrap() }, ); diff --git a/src/vdaf/test_vec/15/Prio3SumVecWithMultiproof_0.json b/src/vdaf/test_vec/15/Prio3SumVecWithMultiproof_0.json index 6b97e1e10..008b0bf1c 100644 --- a/src/vdaf/test_vec/15/Prio3SumVecWithMultiproof_0.json +++ b/src/vdaf/test_vec/15/Prio3SumVecWithMultiproof_0.json @@ -16,10 +16,10 @@ "c39874de5db91c9413dab3c055c16f0401886fdef172d79f6d1c8a8a494c99f5155e78a9ca0b393ba7f04c7d467df46f06e28c26102df9680ffc45b7dd00264287a40c330560ea67b587fa6c2d22c3b2", "3e688b21a146e36bef264c3fa93e90fb027990210d8d286097e47575b5b3660af0a2875634f4c6c45f10b382b8820b90011f73d9eed20697f904ba4821ffd9bd825cf3ccf99f159855790593d1dd3c4d" ], - "bits": 8, "chunk_length": 9, "ctx": "736f6d65206170706c69636174696f6e", "length": 10, + "max_measurement": 255, "operations": [ { "operation": "shard", diff --git a/src/vdaf/test_vec/15/Prio3SumVecWithMultiproof_1.json b/src/vdaf/test_vec/15/Prio3SumVecWithMultiproof_1.json index e4e8af398..e8d406f55 100644 --- a/src/vdaf/test_vec/15/Prio3SumVecWithMultiproof_1.json +++ b/src/vdaf/test_vec/15/Prio3SumVecWithMultiproof_1.json @@ -10,10 +10,10 @@ "4356b26ddbf021fcf80f75978c42dcc66001980947ad49d0", "e40030d9d748c588c24f0917a8fa006691fc0d272dfa797b" ], - "bits": 16, "chunk_length": 7, "ctx": "736f6d65206170706c69636174696f6e", "length": 3, + "max_measurement": 65535, "operations": [ { "operation": "shard", diff --git a/src/vdaf/test_vec/15/Prio3SumVec_0.json b/src/vdaf/test_vec/15/Prio3SumVec_0.json index 655034d92..0cfab2dbe 100644 --- a/src/vdaf/test_vec/15/Prio3SumVec_0.json +++ b/src/vdaf/test_vec/15/Prio3SumVec_0.json @@ -16,10 +16,10 @@ "de30a92af16bc2ab4da894e09426019d0d3cd9897a4e0ed38a1e7cde38fed1fd78b6df5176e37263f7cecb715966820a07045939da773b834c226dfa7c324916427edcf2eebf55d4a4fd9b3897e35851827dd8ebd784d3099d17d54de4c0a71a77842e8666086c4daac340201a50386b8435787649d598d01d2b4e0dae72c58eb2096da354a19135170a7adb3dcf2ba4312a75565a4e3a2e39bfdad5f9f9099f", "23d056d50e943d5496576b1f6bd9fe62f5c4267685b1f12c59e18321c7012e028b4a20ae891c8d9cec30348ea6997df5fdfca6c62588c47c97dd920583cdb6e9c382230d1140aa2b3f0264c7681ca7ae84832714287b2cf646e82ab21b3f58e5907cd17999f793b2393cbfdfe5afc79484cb8789b62a672fc6d4b1f2518d3a7157f7925cab5e6ecaccf58524c230d45bd9d68aa9a5b1c5d1aa40252a0606f660" ], - "bits": 8, "chunk_length": 9, "ctx": "736f6d65206170706c69636174696f6e", "length": 10, + "max_measurement": 255, "operations": [ { "operation": "shard", diff --git a/src/vdaf/test_vec/15/Prio3SumVec_1.json b/src/vdaf/test_vec/15/Prio3SumVec_1.json index 50d9c6e58..bb6dda35b 100644 --- a/src/vdaf/test_vec/15/Prio3SumVec_1.json +++ b/src/vdaf/test_vec/15/Prio3SumVec_1.json @@ -6,14 +6,14 @@ 26980 ], "agg_shares": [ - "1804634db47edf168657b3954adfe41316ac15c1a9746b5e78002e5e9c25b59c790ca00130c66787bd77eb5cfff9cc42", - "21c51bfc8419ef45fbb04ca38ca00091a1461d555042156101e21121ac1c4bacdd05a734256825585d624cf21a38e606", - "d8e781b6c66731a362f7ffc628801a5b4937cee905497f404e1dc080b7bdffb60f57b9c9aad17220c925c8b0e5cd4cb6" + "a57e1e884c0b655e8f84994f4a98b174ff55c3552d7e9fb97d97ff8c545ef989e5f38c16f2675bb22df31f5c42f3df47", + "f7d10fa679123aa54ecf2b79697785361f4b49f9ba69dcb8e84dd9abf8acb46254dab840b6ea6847818bc94764a5b807", + "7560d2d139e260fc05ac3a374cf0c854e188f4b01718848d7d1a27c7b2f451132c9bbaa857ad3b063581165c596767b0" ], - "bits": 16, "chunk_length": 7, "ctx": "736f6d65206170706c69636174696f6e", "length": 3, + "max_measurement": 32000, "operations": [ { "operation": "shard", @@ -188,7 +188,7 @@ "prep": [ { "input_shares": [ - "85d237df3416b710eaf3a8de047980d218fc28c39f5fbdc7aee7b838034e2ea98dba20fb535040a21d805c78b8322906c8466acbbcd3a641dd4fec7fab05a795dacdef8c4cb6e6d1bf77b2a2559ad3e926540dfd13e8879173995a3b17c6a6622ee49768084ab70a6e423614bee0b6780036300b36517532168778de9ba321669ca5f321fcf73afbdc9c6255ef66d37d1ce1c390dff9607aabca6a32253aa447de9cfe68ca30827938402d0394cd892bef1e4dce1bdc57534069593d91430c2c85936d12debb90b07f1d32bcc28d8567b53ea47fd94ec9b90cfde39cada3ebba6f0d309e8aee29b9634b596880de0a02e8f44feab8f1144bfb3ce4e9002d1e2611e1ca567c63786f2c062f3540a0050a17f3459e79ab568caf1a5b1c52d29220352eeecc342967ef412a96894c8dd0ea8819c00bedcc2219b5b95e21e67e5aa0edf98064dab57378adeec40ebe5982234825b2f5908a4a7efc07ef57f1187f5e64ae268bfa646ecd80b6df6fac333cc00f42d8348600bb607321323d7124b7a2fa0bacbf03f6cc690f4cf3be68868e97076828c70b0a9ab0d5e3599aa879957d3cbd7e6a59e677b3a4da26762aeeeb4c153f9241696613516f5d482f2d4246dd3944219e92bb6ba6d949af52205d6c7d9b567cf84d1fe21b3f19ebc1914904134e69146421b186095e05d395b64bbecf9bf21fee1a693853cccc0470e54001fd61fa4a5ad4be1b4f19b64e21111480b44538cbe6c5bce974ec414b8df52c839034f2fbff2ed7d67718d30778989eaf5b1c8fb01416cec455ed2c6416177e584ee49dd204f3778d1ef9ab9470c30e647eecbf80ab482bbf1ca41f6c4b00d62768ece36f6fb8a8ce3aa5e8f9207bec4e86db5cb574a5ad703c679969032234468443414ffe96ca893f500eedda1fb53ad4716099b995e120e7dc403f80ff4d814d90dcd1303a74b17aba4cc44c095d8c6b456b0a2ac415109f50290159a9a921816e85d9247a41f37f4afdaa4228312229285108a505a3981051f69430896bc9c760345d6602926413d003ad380e568f3fd365382c314b3076d34a9458cce0183ed096ab0f8259502653ba7eb6be635cf02306340bb5c0d658db16ebac3afad4d415f0fd316a153fcce9b964ac4d870a7160989de29100e87fafba45028201fe8fb1290b3de20651f31ed9dcb835d1089489f3369181a57c34c979a40d13c46c4969bd4b798e004453664618d913a7c34894ba39657863680ea27a3538cae4403847043556c67a98eadfbadc8baab039f00d7b760f8a884faee09fdd838680892ab9760212182dc94aa845c4283a3216d7b8faea7a3457ca7d25d5d9040ac222bc99731d3c8060a2d375e308d66669ac94ae5dea63d994b2a1066a22b8ed121f1d2826506cd8021805e0b8d9b0fd336f736c95f3c09ca69acf80cbc3902c82deb1aad46069966473963266d6bd940b111f6e32519adaf794df9b12ad363ce1e6fc3ff5adf4fafaa3ff9ede2fe8ef168fb4da702baf8ebddaf3fee4bc268256fca2dada5cb790e2b90c9149ebf1cdb799d83c2b7f36bd78e5604a4357f94d613ecade628f07d234d01c5fc1d6a2f92a97a90221012a0c778ddfba30030d577ab6a3cc314b60c8f1dae1010f7e1bf5c8733dffcadb3e3188dc67527433da7638d0151a9e55a7d33f676ebda360cc9910beee90adae1cd3a3f473e696a95b8dfa41a1af4dbbdbc36e3830ec21a81451030e35808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "85d237df3416b710eaf3a8de047980d218fc28c39f5fbdc7aee7b838034e2ea98dba20fb535040a21d805c78b8322906c8466acbbcd3a641dd4fec7fab05a795dacdef8c4cb6e6d1bf77b2a2559ad3e926540dfd13e8879173995a3b17c6a6622ee49768084ab70a6e423614bee0b6780036300b36517532168778de9ba321669ca5f321fcf73afbdc9c6255ef66d37d1ce1c390dff9607aabca6a32253aa447de9cfe68ca30827938402d0394cd892bef1e4dce1bdc57534069593d91430c2c85936d12debb90b07f1d32bcc28d8567b53ea47fd94ec9b90cfde39cada3ebba6f0d309e8aee29b9634b596880de0a02e9f44feab8f1144bfb3ce4e9002d1e2612e1ca567c63786f2c062f3540a0050a18f3459e79ab568caf1a5b1c52d29220362eeecc342967ef412a96894c8dd0ea8919c00bedcc2219b5b95e21e67e5aa0eef98064dab57378adeec40ebe5982234925b2f5908a4a7efc07ef57f1187f5e65ae268bfa646ecd80b6df6fac333cc01042d8348600bb607321323d7124b7a2fa0bacbf03f6cc690f4cf3be68868e97086828c70b0a9ab0d5e3599aa879957d3cbd7e6a59e677b3a4da26762aeeeb4c153f9241696613516f5d482f2d4246dd3944219e92bb6ba6d949af52205d6c7d9b567cf84d1fe21b3f19ebc1914904134e69146421b186095e05d395b64bbecf9bf21fee1a693853cccc0470e54001fd60fa4a5ad4be1b4f19b64e21111480b44638cbe6c5bce974ec414b8df52c839034f2fbff2ed7d67718d30778989eaf5b1b8fb01416cec455ed2c6416177e584ee49dd204f3778d1ef9ab9470c30e647eecbf80ab482bbf1ca41f6c4b00d62768ece36f6fb8a8ce3aa5e8f9207bec4e86db5cb574a5ad703c679969032234468443414ffe96ca893f500eedda1fb53ad4716099b995e120e7dc403f80ff4d814d90dcd1303a74b17aba4cc44c095d8c6b456b0a2ac415109f50290159a9a921816e85d9247a41f37f4afdaa4228312229d096ab0f8259502653ba7eb6be635cf02306340bb5c0d658db16ebac3afad4d415f0fd316a153fcce9b964ac4d870a7160989de29100e87fafba45028201fe8fb1290b3de20651f31ed9dcb835d1089489f3369181a57c34c979a40d13c46c4969bd4b798e004453664618d913a7c34894ba39657863680ea27a3538cae4403847043556c67a98eadfbadc8baab039f00d7b760f8a884faee09fdd838680892ab9760212182dc94aa845c4283a3216d7b8faea7a3457ca7d25d5d9040ac222bc99731d3c8060a2d375e308d66669ac94ae5dea63d994b2a1066a22b8ed121f1da06d6d377d3e3ea6763f4e6f4fcfa569553e6b0e3a5d8f4283d8470e276ecb9a32f79cf11007195f2e53250d74e0f6c3bb1360f984e0af9cf6f60995f9326ff4e403b29e9129b6444ef6857c1a20f57ab196aa0b69aa5716eb7bbc86dd6bab3596929eacf51afd1faec92f34f46f4d453c2b7f36bd78e5604a4357f94d613eca661b723c2df9a97bc83a62e4a78f60b3197889dc6ec0986cb8237f8f5c8ec9ba450f0fd84d4f3519ea212fcc15f48d98b2e9ccdf869fc1aaf78fd67bb9e6471e748f51fd3c1155292a8c0a386f075828b8872fc0f8b677511600aafb31e5920ef39579e65e36f51ccfa163d22a4b5ac8808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", "404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f" ], @@ -199,26 +199,26 @@ ], "nonce": "000102030405060708090a0b0c0d0e0f", "out_shares": [ - "1398cb193c2af55c231d91dc18f5f65bb3fdb195387cce74c9aa641f34b79189bb8b8a001042cdd7357d4e74aaa8996b", - "0b975ea98108a56cfe3ac48bd98a5530e16cb471c5c0b17598a0b0b58e0919e44a57e2660c780cc8157619a6b312a257", - "f3f7d53c42cd6536c2a7aa970d80b3736e129af801c37f1566b4ea2a3d3f5592051d9398e3452660980c98e5a144c43c" + "976b5f2dc403771f8581881a6edde52601e1eb71647f8ae8c187aad9c674a8d8dfd82eb250cd733b5ba60a746ba64a6d", + "a8f0af8c2806bee11045b97d78d281670b19c3fde8cd9e3d90c49d8efd8e91cb72f3921592a3cd17c38398c2768c3dad", + "d2caf04513f6cafe4d39be6719509871f6825190b2b2d6d975b3b7973bfcc55bba333e381d8fbeaca9d55cc91dcd77e5" ], "prep_messages": [ - "5f149db2819d9d191f3cd67607cd4caef93159eccca7b4d6e361c7600788f808" + "7f82e4564058e3c99222c0c999125cd9adf75d11f0c10954d88155a97299e3e8" ], "prep_shares": [ [ - "51ffd96b532bbf0a52b2f58afc18ea46b1bcc466517198a06a5bb42070cf1d65b68dc64cd0b7bdff12d1453c0054ec535bbd88534d772a2adf54b1591a86bef0e111287229a4312f5cab84dbc74d9eb98226ef05a212f9e1ea5e51000f58ce01ff9441e04969bfe462477158c315340247f6ab86ec35cbca52ae725052a638f93a92bffa1fb71b5df9e430cae0faaaf98a2680a08468768a63abd64a833cd957663b0692b883cf48b4842d80726ad72071fd0bb8ed32ee320abaabed6a432cb6e8844ccf827cc82d67ceaba64c90747004682cb73f9257471f56eb7cd3ad350c3d4644f2575d9b9990869c8bc6d2d4b5afcdedcb1020ce9c886fb1c9db93294cb242c3cfaa7fc6323782d2222eed6660ef11346f78130b02403982d787950aea", - "aab8956a8796a121e384dd5b9dc2e196871d3ab10076502513f46fd7a72f373d141a07a44f86f00b2cda02dd817a2f85a87766501ac368bc9f29a862143b7c1c5a3e85c1d31a279ed84cdc4d85c2d8f59005187b9df36e720282b51a0460def5198aa0dfed40b6a0773b3ce324359ebf7ae08d19b50ed5a58c41503e6a3443c20e2c33641f01626049d3db97f76f821391f766c07cbd2c46ce5c81024ce0f77aae872b1c5d6d756b9c775ac1323c62b123c770aca3a88e68953eed6d4fd76e70c2ee08eefab0858accb535da8cf86797537149a9c2e3e896542a47b359450b59e4c0a111242a58794b041e62036641582ad14b4e015b35082a9189535becf26364431e50f84337393bc357c54663ecd37a782e41bc39fc532d5e10c817752c33", - "06489029253e9fd3aec82c1966243422e4f448da422e967346db1ad2b1e3f68330ba45d7f57de164b3aa9ece4b77a8902e0f799d8d206f26f5f6e7dddfd20394f7a49102dd52135c07ef99e633b2848fb893bbaaaf0fe6a07608847875034e20795b72dfef7b53cb39a6208babe70df25ceb088e02abebc02c3a22a62e0f3e540831d61e841d524e544f908c340bd58e3ee4dd62b4d09aaf04df00ab5bd68ac2e644b746b9f82276c8f72826491ab372e7adce3e529bdccae0b827d13e4b6caac61a73afaf94c56913006bc1df239fd541b66337484cd54ede29ecb2d95bd253afc72b98fe4b97278f0eae2ba038a2d60064cd25924c14665cc237834039da18c5d05045a2b15b194640d6871bb714f4693ee2ee8d0e5861ec969310aa2bcc77" + "51ffd96b532bbf0a52b2f58afc18ea462910e8882286771e22433f91d7e801633d5f6cde4f757e4b102a23e26d22e3f50607fdf2904512224861974a7a04576b0be99ad68b332e356bbce75efc47ce8a316ec98f38811094434872a0d110fd992a6cb444acf8bbea5558d4dbf70f64d39fa4379819e39cbf8d6dac95e3450e7674d3e7bf369e9352cfe2cc5f1bf7de4a17199eecb71d04a4735533092e87038354dbd12b85a8e62508da8e540095846953f833355a78ff4adcae3d23d4ec15eceaa386a26dc586e543b43e45d7ad2cce2b0a4b924790b38578baf812f9d06c2d74e902739b0662952c1dcfd2b46e9f4a2f9cfb450746e626cc9a586e0a1e35ca347059a63d5ea2d5f7114362f7e2d691d377d4bbe051f410db04b92a43a440de", + "aab8956a8796a121e384dd5b9dc2e1963e8c3e57572054a4b3075c6a70b57e75141a07a44f86f00b2cda02dd817a2f8535bfc03765261f8a35ecf21640790ddf5a3e85c1d31a279ed84cdc4d85c2d8f5870533e58f4d26ec35d3dfd448072046198aa0dfed40b6a0773b3ce324359ebff604dab86e062651ca143599f850294abd42b28252d079fcc9047fcdd0d0b7d2208eeb8946474274beaa7424a2b4ff9d32a265151e0a70f0453c6eedae44e35ed876ae39fa5d73dd9873138d49550d2babc29dfbf1f30c7fd1ea576051d19430f7d1aa36cd205514c2f938a0fdc1e54ce4c0a111242a58794b041e62036641582ad14b4e015b35082a9189535becf263fb887dfc44af8c910acc8545516e3d13c78c31c7d7080e2f9a585d6f05e415fe", + "06489029253e9fd3aec82c196624342289e666422155308a8d768c537f9ae77e30ba45d7f57de164b3aa9ece4b77a89042095361e1e33d8a246e60904a0b1da9f7a49102dd52135c07ef99e633b2848fa7533968465ca0aedbb10d34cb23fbd2795b72dfef7b53cb39a6208babe70df2125c616198b186594a2c32003e3b0e9b567cedbb7d1089b899b683080f4a36133132f4f45a6972497c8d717d124ec3ccb6375429cbcc183b54d9c4b775967ce7e6ae73cc434b08b53ddbe47a1c772066fbf4323ed4ab3b9837913ad57c14bdd9ec9d3fb032bfd366472a7badf2c84a88afc72b98fe4b97278f0eae2ba038a2d60064cd25924c14665cc237834039da183edfa8ec3a3b00e3869e37a2f80afd560c83879d31ca4485740eea6554e0a6da" ] ], - "public_share": "b242c3cfaa7fc6323782d2222eed6660ef11346f78130b02403982d787950aea64431e50f84337393bc357c54663ecd37a782e41bc39fc532d5e10c817752c33c5d05045a2b15b194640d6871bb714f4693ee2ee8d0e5861ec969310aa2bcc77", + "public_share": "347059a63d5ea2d5f7114362f7e2d691d377d4bbe051f410db04b92a43a440defb887dfc44af8c910acc8545516e3d13c78c31c7d7080e2f9a585d6f05e415fe3edfa8ec3a3b00e3869e37a2f80afd560c83879d31ca4485740eea6554e0a6da", "rand": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf" }, { "input_shares": [ - "85d237df3416b710eaf3a8de047980d219fc28c39f5fbdc7aee7b838034e2ea98eba20fb535040a21d805c78b8322906c9466acbbcd3a641dd4fec7fab05a795d9cdef8c4cb6e6d1bf77b2a2559ad3e926540dfd13e8879173995a3b17c6a6622ee49768084ab70a6e423614bee0b6780136300b36517532168778de9ba321669ca5f321fcf73afbdc9c6255ef66d37d1ce1c390dff9607aabca6a32253aa447dd9cfe68ca30827938402d0394cd892bf01e4dce1bdc57534069593d91430c2c85936d12debb90b07f1d32bcc28d8567b43ea47fd94ec9b90cfde39cada3ebba700d309e8aee29b9634b596880de0a02e8f44feab8f1144bfb3ce4e9002d1e2612e1ca567c63786f2c062f3540a0050a18f3459e79ab568caf1a5b1c52d29220362eeecc342967ef412a96894c8dd0ea8919c00bedcc2219b5b95e21e67e5aa0eef98064dab57378adeec40ebe5982234825b2f5908a4a7efc07ef57f1187f5e64ae268bfa646ecd80b6df6fac333cc01042d8348600bb607321323d7124b7a2f90bacbf03f6cc690f4cf3be68868e97076828c70b0a9ab0d5e3599aa879957d3cbd7e6a59e677b3a4da26762aeeeb4c153f9241696613516f5d482f2d4246dd3844219e92bb6ba6d949af52205d6c7d9a567cf84d1fe21b3f19ebc1914904134e69146421b186095e05d395b64bbecf9bf21fee1a693853cccc0470e54001fd61fa4a5ad4be1b4f19b64e21111480b44538cbe6c5bce974ec414b8df52c839035f2fbff2ed7d67718d30778989eaf5b1b8fb01416cec455ed2c6416177e584ee59dd204f3778d1ef9ab9470c30e647eedbf80ab482bbf1ca41f6c4b00d62768ede36f6fb8a8ce3aa5e8f9207bec4e86dc5cb574a5ad703c679969032234468444414ffe96ca893f500eedda1fb53ad4726099b995e120e7dc403f80ff4d814d90dcd1303a74b17aba4cc44c095d8c6b466b0a2ac415109f50290159a9a921816e85d9247a41f37f4afdaa4228312229285108a505a3981051f69430896bc9c760345d6602926413d003ad380e568f3fd365382c314b3076d34a9458cce0183ed096ab0f8259502653ba7eb6be635cf02306340bb5c0d658db16ebac3afad4d415f0fd316a153fcce9b964ac4d870a7160989de29100e87fafba45028201fe8fb1290b3de20651f31ed9dcb835d1089489f3369181a57c34c979a40d13c46c4969bd4b798e004453664618d913a7c34894ba39657863680ea27a3538cae4403847043556c67a98eadfbadc8baab039f00d7b760f8a884faee09fdd838680892ab9760212182dc94aa845c4283a3216d7b8faea7a3457ca7d25d5d9040ac222bc99731d3c8060a2d375e308d66669ac94ae5dea63d994b2a1066a22b8ed121f1dd3ae400cae0e1383886d41136d0e6071a071c5be582ad8dfc9d9102e3e1e53341bf0ca7e57c66ba20b621ff971210cee0f1349f273c8d9ba27a3d86e00f5371c61a66b6f7871d1f68b74a51e3268af1530080d8c95a17b8b2175af159619bf5389a18c7f2cf48b2496e527b5f83ea4123c2b7f36bd78e5604a4357f94d613eca33da9e67fc28d59eb60c6f408a50a6abcd442f2c50f34fcf8d22b66f45de41215c16e14a0790e2d50c1335e017b3786e5eeae3e697b7978cc6e307a2b2247ff6f7ec972c56c93977ec0deb9557bf9d8d3a16cd3fccbf53dcc306b76c79377ff000878b13285d6618e7856b51267c03fb808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "86d237df3416b710eaf3a8de047980d218fc28c39f5fbdc7aee7b838034e2ea98eba20fb535040a21d805c78b8322906c9466acbbcd3a641dd4fec7fab05a795d9cdef8c4cb6e6d1bf77b2a2559ad3e926540dfd13e8879173995a3b17c6a6622ee49768084ab70a6e423614bee0b6780136300b36517532168778de9ba321669ba5f321fcf73afbdc9c6255ef66d37d1ce1c390dff9607aabca6a32253aa447de9cfe68ca30827938402d0394cd892bf01e4dce1bdc57534069593d91430c2c85936d12debb90b07f1d32bcc28d8567b43ea47fd94ec9b90cfde39cada3ebba700d309e8aee29b9634b596880de0a02e8f44feab8f1144bfb3ce4e9002d1e2612e1ca567c63786f2c062f3540a0050a18f3459e79ab568caf1a5b1c52d29220362eeecc342967ef412a96894c8dd0ea8919c00bedcc2219b5b95e21e67e5aa0edf98064dab57378adeec40ebe5982234825b2f5908a4a7efc07ef57f1187f5e65ae268bfa646ecd80b6df6fac333cc01042d8348600bb607321323d7124b7a2fa0bacbf03f6cc690f4cf3be68868e97086828c70b0a9ab0d5e3599aa879957d3cbd7e6a59e677b3a4da26762aeeeb4c143f9241696613516f5d482f2d4246dd3844219e92bb6ba6d949af52205d6c7d9b567cf84d1fe21b3f19ebc1914904134e69146421b186095e05d395b64bbecf9bf21fee1a693853cccc0470e54001fd61fa4a5ad4be1b4f19b64e21111480b44538cbe6c5bce974ec414b8df52c839035f2fbff2ed7d67718d30778989eaf5b1c8fb01416cec455ed2c6416177e584ee59dd204f3778d1ef9ab9470c30e647eedbf80ab482bbf1ca41f6c4b00d62768ede36f6fb8a8ce3aa5e8f9207bec4e86dc5cb574a5ad703c679969032234468443414ffe96ca893f500eedda1fb53ad4726099b995e120e7dc403f80ff4d814d90dcd1303a74b17aba4cc44c095d8c6b456b0a2ac415109f50290159a9a921816e85d9247a41f37f4afdaa4228312229d096ab0f8259502653ba7eb6be635cf02306340bb5c0d658db16ebac3afad4d415f0fd316a153fcce9b964ac4d870a7160989de29100e87fafba45028201fe8fb1290b3de20651f31ed9dcb835d1089489f3369181a57c34c979a40d13c46c4969bd4b798e004453664618d913a7c34894ba39657863680ea27a3538cae4403847043556c67a98eadfbadc8baab039f00d7b760f8a884faee09fdd838680892ab9760212182dc94aa845c4283a3216d7b8faea7a3457ca7d25d5d9040ac222bc99731d3c8060a2d375e308d66669ac94ae5dea63d994b2a1066a22b8ed121f1d126c5bfb0e61ed7cc721bf35115d8c40b6da96040fac59bdcbc2309ae02da8e388264901d5af6fb7c768d510e78af31ee76e59c2bfe88928766f198d5e6e95bacbc95cb849d7913e9697d7494ea4cbd890ec865ce5268c81a436640c6de9cb59a191098eaefdcc1e54b99841cbef1ac73c2b7f36bd78e5604a4357f94d613ecaf41c84789bd6faa47758f11de6017adcb8db5de69971cef16f399603a3ceec71eedf62c889a6dec06c0c7fc8a249913d868ed3164c97e71e7817c78354ab21588ec9a6e38463792fc6eab86a3b8381cada31536f7c3a43e640450276a26772eae8960e05a653251e29b2fac453cb8c46808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", "404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f" ], @@ -229,26 +229,26 @@ ], "nonce": "000102030405060708090a0b0c0d0e0f", "out_shares": [ - "91bccb193c2af55c231d91dc18f5f65b52cdb195387cce74c9aa641f34b79189a7978a001042cdd7357d4e74aaa8996b", - "0b975ea98108a56cfe3ac48bd98a5530e16cb471c5c0b17598a0b0b58e0919e44a57e2660c780cc8157619a6b312a257", - "f3f7d53c42cd6536c2a7aa970d80b3736e129af801c37f1566b4ea2a3d3f5592051d9398e3452660980c98e5a144c43c" + "15905f2dc403771f8581881a6edde526a0b0eb71647f8ae8c187aad9c674a8d8cbe42eb250cd733b5ba60a746ba64a6d", + "a8f0af8c2806bee11045b97d78d281670b19c3fde8cd9e3d90c49d8efd8e91cb72f3921592a3cd17c38398c2768c3dad", + "d2caf04513f6cafe4d39be6719509871f6825190b2b2d6d975b3b7973bfcc55bba333e381d8fbeaca9d55cc91dcd77e5" ], "prep_messages": [ - "41e9ead9a8d4e83123f351ac162baee8858e3fbcee01e3e8e13395366342b087" + "ec99e56973cf0cea725471f403ce72e98269e73fa0ad3740b14615154f63ee55" ], "prep_shares": [ [ - "51ffd96b532bbf0a52b2f58afc18ea46a7db6073a8e4f3f865b395dc0cd1d058a4234ca38722c594b0703d09cb9459f5a22eb285bbd2b0ee4f5e3bdf2d4ae2d2512f455169be0941be0732caab35d6da9f2c9776928454e1d3fc0cd81a24eb5863d164f547fa99f707b07d7c8026e94a1377e42283ab96c6f87b1381744d9ef9ade7d4310a98df24bb1872685ecf4bbc882679a0c0362cf08d39087cb2d04e5648bdd61c75604deb6a46c7603c8f438058da54fbb71d7d7aeca16630d4fd8e4c8c8a19a2654e04e85c86318413bcad9f27214639b1ce14d2aa5a8c6b46e81a54bef63b9d274521fc0e140a4dd8c9fc3d392397dabc861a9f444bcdffe48ac0e57bbadfa788aa88120a30d451bacc73bd95c77e9064fb21ec1a6283cd6241849c", - "aab8956a8796a121e384dd5b9dc2e196802208434ffa07ff6587ccc3c1fe8b58141a07a44f86f00b2cda02dd817a2f85ae6d940e21f1c96da205eccbab7602ab5a3e85c1d31a279ed84cdc4d85c2d8f52563bd07c9e0b151b4fdcc2cd5a3d70a198aa0dfed40b6a0773b3ce324359ebf1d76b0e274e051994c1a2e52e7815c4f0e2c33641f01626049d3db97f76f8213adb74cb2a3df578f6167df6e23ec6a3eae872b1c5d6d756b9c775ac1323c62b18f008a01fecf62323f15646a128a03e1c2ee08eefab0858accb535da8cf86797c44358b7cded05599af684c58a71f9a7e4c0a111242a58794b041e62036641582ad14b4e015b35082a9189535becf26364431e50f84337393bc357c54663ecd37a782e41bc39fc532d5e10c817752c33", - "06489029253e9fd3aec82c19662434225c32244c91840c8e5c34b2c8b4a4fdda30ba45d7f57de164b3aa9ece4b77a89098e5c001b43ee1a8859f1209a558442af7a49102dd52135c07ef99e633b2848ff4fa08143e1db73c9f4e3b20dd54d500795b72dfef7b53cb39a6208babe70df241530c60fe60d633c1550d3d3abb9bb30831d61e841d524e544f908c340bd58e30de8e27e9159683932fecc6b204b185e644b746b9f82276c8f72826491ab3720d708a06b466290917f1380aee393ac0c61a73afaf94c56913006bc1df239fd5b8fdcfecff6c7df4dbefb49a8b7c77a5afc72b98fe4b97278f0eae2ba038a2d60064cd25924c14665cc237834039da18c5d05045a2b15b194640d6871bb714f4693ee2ee8d0e5861ec969310aa2bcc77" + "51ffd96b532bbf0a52b2f58afc18ea46e03d28d7e5fcb56ff2a138aaf945db40dd88fc532324a3a162c8e6a953abde6c36b3e458397acfdd92440fc9e1f1696a3529459111cf31c147079ea033bc2883b7a1eeeb028364bbb6d34522384bdf0763d164f547fa99f707b07d7c8026e94af4286534fe10aa9d1fbff7d0e8e53b3cae389870d29f715f653a7600a40d64c25f84e12f47ea876fe082a40729c0e859e7e3b324c1d592aba81a48dfd9685e9a17e257159835551c45a7ed67e585470b017ab6b3aacb9106da9eec53d962f467d24cfbd3ed720bf19768f9d18eb835f6941fc938c5b524f6ff02a7c9a3cfcc6c4836eb34fa6124f10122b5fad316b5253cfb410b8fe7dbca51fa73501452f5755efcb7e3bbc2f93d4bfefa9ab7c0d388", + "aab8956a8796a121e384dd5b9dc2e19659a215d04b556ec5cb37b809da65ec74141a07a44f86f00b2cda02dd817a2f85a5097158f8102fbed3552287ab1864035a3e85c1d31a279ed84cdc4d85c2d8f52d46e9b12c277873ddb1c5c3a7c50fb9198aa0dfed40b6a0773b3ce324359ebf15c9f669c4f2e16c2b88217b2f0c022bbd42b28252d079fcc9047fcdd0d0b7d26f08b3aa201b424d7c3ca51e5d35f1d332a265151e0a70f0453c6eedae44e35e7e9cd397a57d8ce4bdc4e6590cdee9eaabc29dfbf1f30c7fd1ea576051d19430e496ea2d3943441db11434e8f3bba3e8e4c0a111242a58794b041e62036641582ad14b4e015b35082a9189535becf263fb887dfc44af8c910acc8545516e3d13c78c31c7d7080e2f9a585d6f05e415fe", + "06489029253e9fd3aec82c196624342206edc3c55ac7d77247feda7c0032719330ba45d7f57de164b3aa9ece4b77a890b5bf5a89afde72ca17ec9ef7c3b3efedf7a49102dd52135c07ef99e633b2848f6c2713cc58233cfdd776ff8bdaec1ab1795b72dfef7b53cb39a6208babe70df2c4fd27c3b2d37a45959ec8286da95d05567cedbb7d1089b899b683080f4a3613c87d1c51f08220bc69b030782724b058b6375429cbcc183b54d9c4b775967ce7c50a6db4b96197b447b13797fa359fa6fbf4323ed4ab3b9837913ad57c14bdd983d687e68bc978a12b8a99d71db610ffafc72b98fe4b97278f0eae2ba038a2d60064cd25924c14665cc237834039da183edfa8ec3a3b00e3869e37a2f80afd560c83879d31ca4485740eea6554e0a6da" ] ], - "public_share": "7bbadfa788aa88120a30d451bacc73bd95c77e9064fb21ec1a6283cd6241849c64431e50f84337393bc357c54663ecd37a782e41bc39fc532d5e10c817752c33c5d05045a2b15b194640d6871bb714f4693ee2ee8d0e5861ec969310aa2bcc77", + "public_share": "3cfb410b8fe7dbca51fa73501452f5755efcb7e3bbc2f93d4bfefa9ab7c0d388fb887dfc44af8c910acc8545516e3d13c78c31c7d7080e2f9a585d6f05e415fe3edfa8ec3a3b00e3869e37a2f80afd560c83879d31ca4485740eea6554e0a6da", "rand": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf" }, { "input_shares": [ - "85d237df3416b710eaf3a8de047980d219fc28c39f5fbdc7aee7b838034e2ea98dba20fb535040a21d805c78b8322906c8466acbbcd3a641dd4fec7fab05a795dacdef8c4cb6e6d1bf77b2a2559ad3e927540dfd13e8879173995a3b17c6a6622fe49768084ab70a6e423614bee0b6780036300b36517532168778de9ba321669ba5f321fcf73afbdc9c6255ef66d37d1ce1c390dff9607aabca6a32253aa447de9cfe68ca30827938402d0394cd892bf01e4dce1bdc57534069593d91430c2c86936d12debb90b07f1d32bcc28d8567b53ea47fd94ec9b90cfde39cada3ebba6f0d309e8aee29b9634b596880de0a02e8f44feab8f1144bfb3ce4e9002d1e2612e1ca567c63786f2c062f3540a0050a18f3459e79ab568caf1a5b1c52d29220362eeecc342967ef412a96894c8dd0ea8919c00bedcc2219b5b95e21e67e5aa0eef98064dab57378adeec40ebe5982234825b2f5908a4a7efc07ef57f1187f5e65ae268bfa646ecd80b6df6fac333cc00f42d8348600bb607321323d7124b7a2f90bacbf03f6cc690f4cf3be68868e97076828c70b0a9ab0d5e3599aa879957d3bbd7e6a59e677b3a4da26762aeeeb4c143f9241696613516f5d482f2d4246dd3844219e92bb6ba6d949af52205d6c7d9b567cf84d1fe21b3f19ebc1914904134e69146421b186095e05d395b64bbecf9bf21fee1a693853cccc0470e54001fd60fa4a5ad4be1b4f19b64e21111480b44638cbe6c5bce974ec414b8df52c839035f2fbff2ed7d67718d30778989eaf5b1b8fb01416cec455ed2c6416177e584ee49dd204f3778d1ef9ab9470c30e647eedbf80ab482bbf1ca41f6c4b00d62768ede36f6fb8a8ce3aa5e8f9207bec4e86db5cb574a5ad703c679969032234468444414ffe96ca893f500eedda1fb53ad4716099b995e120e7dc403f80ff4d814d91dcd1303a74b17aba4cc44c095d8c6b466b0a2ac415109f50290159a9a921816f85d9247a41f37f4afdaa4228312229285108a505a3981051f69430896bc9c761345d6602926413d003ad380e568f3fd365382c314b3076d34a9458cce0183ed096ab0f8259502653ba7eb6be635cf02306340bb5c0d658db16ebac3afad4d415f0fd316a153fcce9b964ac4d870a7160989de29100e87fafba45028201fe8fb1290b3de20651f31ed9dcb835d1089489f3369181a57c34c979a40d13c46c4969bd4b798e004453664618d913a7c34894ba39657863680ea27a3538cae4403847043556c67a98eadfbadc8baab039f00d7b760f8a884faee09fdd838680892ab9760212182dc94aa845c4283a3216d7b8faea7a3457ca7d25d5d9040ac222bc99731d3c8060a2d375e308d66669ac94ae5dea63d994b2a1066a22b8ed121f1d3d88e532ff5ad471ce5611e1cef203e86db1315be762648ecb578a09df60921c2192a42ba72f618d3ff11ec21dfb5400b6a1797b6878b0f676e414da6d5daeb53abb0efb3e9ee48da608dcc3a87b27cb86fd833c034ade3db7cdb647b2b3d32996abb215aa7ca129b68c82477c96aa6c3c2b7f36bd78e5604a4357f94d613ecac900fa40abdc13b070239f72286c02350005c38fc1bac3208ca43c94a49b02395574079eb726edeaf48335176cd92f5cb75bb35da307c15077a2cb3645bc085d1fd8f4a08f9c26e0b579b4f0e0ab25d8e320568f5e17f1294aaeaf3a5d9d6a1af37c657daad45013c7de10bfa224fda0808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "85d237df3416b710eaf3a8de047980d219fc28c39f5fbdc7aee7b838034e2ea98dba20fb535040a21d805c78b8322906c8466acbbcd3a641dd4fec7fab05a795dacdef8c4cb6e6d1bf77b2a2559ad3e927540dfd13e8879173995a3b17c6a6622fe49768084ab70a6e423614bee0b6780036300b36517532168778de9ba321669ba5f321fcf73afbdc9c6255ef66d37d1ce1c390dff9607aabca6a32253aa447de9cfe68ca30827938402d0394cd892bf01e4dce1bdc57534069593d91430c2c86936d12debb90b07f1d32bcc28d8567b53ea47fd94ec9b90cfde39cada3ebba6f0d309e8aee29b9634b596880de0a02e8f44feab8f1144bfb3ce4e9002d1e2612e1ca567c63786f2c062f3540a0050a18f3459e79ab568caf1a5b1c52d29220362eeecc342967ef412a96894c8dd0ea8919c00bedcc2219b5b95e21e67e5aa0edf98064dab57378adeec40ebe5982234925b2f5908a4a7efc07ef57f1187f5e64ae268bfa646ecd80b6df6fac333cc01042d8348600bb607321323d7124b7a2fa0bacbf03f6cc690f4cf3be68868e97076828c70b0a9ab0d5e3599aa879957d3bbd7e6a59e677b3a4da26762aeeeb4c143f9241696613516f5d482f2d4246dd3944219e92bb6ba6d949af52205d6c7d9b567cf84d1fe21b3f19ebc1914904134e69146421b186095e05d395b64bbecf9bf21fee1a693853cccc0470e54001fd61fa4a5ad4be1b4f19b64e21111480b44538cbe6c5bce974ec414b8df52c839034f2fbff2ed7d67718d30778989eaf5b1c8fb01416cec455ed2c6416177e584ee59dd204f3778d1ef9ab9470c30e647eecbf80ab482bbf1ca41f6c4b00d62768ece36f6fb8a8ce3aa5e8f9207bec4e86db5cb574a5ad703c679969032234468443414ffe96ca893f500eedda1fb53ad4716099b995e120e7dc403f80ff4d814d90dcd1303a74b17aba4cc44c095d8c6b466b0a2ac415109f50290159a9a921816f85d9247a41f37f4afdaa4228312229d096ab0f8259502653ba7eb6be635cf02306340bb5c0d658db16ebac3afad4d415f0fd316a153fcce9b964ac4d870a7160989de29100e87fafba45028201fe8fb1290b3de20651f31ed9dcb835d1089489f3369181a57c34c979a40d13c46c4969bd4b798e004453664618d913a7c34894ba39657863680ea27a3538cae4403847043556c67a98eadfbadc8baab039f00d7b760f8a884faee09fdd838680892ab9760212182dc94aa845c4283a3216d7b8faea7a3457ca7d25d5d9040ac222bc99731d3c8060a2d375e308d66669ac94ae5dea63d994b2a1066a22b8ed121f1d0bd33fb5e13d3233ed59251e7c1958c0ec30f0849ad0a19c42ca48632a5641842668f72acd05b1c118f2e6977f83d2b5889b677cc996c6d5d585fc31eeeff9ed62182432ea05e7b1b298484b2f302212eef2b926abb32886b9f197c7be5a940703bef42ab80f44136a670fa10d3f89933c2b7f36bd78e5604a4357f94d613ecafbb59fbec8f9b5ee51208b357b45ae5c828504660e4d8612f9317e3a59a653d1519eb49e91509db6ff826d410a51b2a6e561c55c42e9aa711801e4dec429bd24f67adf69e43424bcc5e947695af72a917b2b20a5b6ada6e1478aceba50f6a93c866a23689c41ae2913048465117c1e7a808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", "404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f" ], @@ -259,21 +259,21 @@ ], "nonce": "000102030405060708090a0b0c0d0e0f", "out_shares": [ - "75afcb193c2af55c231d91dc18f5f65b12e1b195387cce74c9aa641f34b7918918e98a001042cdd7357d4e74aaa8996b", - "0b975ea98108a56cfe3ac48bd98a5530e16cb471c5c0b17598a0b0b58e0919e44a57e2660c780cc8157619a6b312a257", - "f3f7d53c42cd6536c2a7aa970d80b3736e129af801c37f1566b4ea2a3d3f5592051d9398e3452660980c98e5a144c43c" + "f9825f2dc403771f8581881a6edde52660c4eb71647f8ae8c187aad9c674a8d83c362fb250cd733b5ba60a746ba64a6d", + "a8f0af8c2806bee11045b97d78d281670b19c3fde8cd9e3d90c49d8efd8e91cb72f3921592a3cd17c38398c2768c3dad", + "d2caf04513f6cafe4d39be6719509871f6825190b2b2d6d975b3b7973bfcc55bba333e381d8fbeaca9d55cc91dcd77e5" ], "prep_messages": [ - "9cccd419e212147f7e2caed91fbf740e30f2c0b9f644a87d0fc821fbd4d1aa5e" + "13d1134c9c5748f7d217ab3d933540cb487631913a5db4506c9dedeacd614119" ], "prep_shares": [ [ - "51ffd96b532bbf0a52b2f58afc18ea46e5ce4000200771e413f4cb24396df1a980e32429d5a7424669b4f6f382953063689d00cfef825fdb7baaf88dc5cb203fb5ab15bbd59114354436f75364cfbbd5ff35161ad479308b2ff312c74571caadc27c4bd0934dea828e194d75e35d58411e7a622a90facb38774ac5379205a898eb63d8e9e3a2210d7c22866b61c87eec8cf85dd11a18dfc671bccd58013f06ecdf15d75776293b80fd5fce226f579e6c3bab427d7bfd99e140be2fa1b2e244545a027d22dc1ed7418d9713512eafe0b3d73ab915ae58a08fea6ec80335cc6b1437e2c0dc3bf389b85fee46921ce28851a4fdb3535e345d369838f07ebcf08cdc8f4a5eed4b1e0e0ebaab6a40b65d4241a95c71dfb8f60fcb6bd19f45194478af", - "aab8956a8796a121e384dd5b9dc2e1960ce03fd2e16533a01365b236961d2415141a07a44f86f00b2cda02dd817a2f8537c237958110c96d2102807b0548e9ff5a3e85c1d31a279ed84cdc4d85c2d8f56fd7e1a0188accc8a4776d94782f2431198aa0dfed40b6a0773b3ce324359ebfd5816fc12f785be11f10952ae7129e680e2c33641f01626049d3db97f76f821397efa1f9703b923a4abd8a57ded162ffae872b1c5d6d756b9c775ac1323c62b167c309d1516223a712dfecf56eaef3d5c2ee08eefab0858accb535da8cf867971796f7cbf8bb8b6a03cde19192a18518e4c0a111242a58794b041e62036641582ad14b4e015b35082a9189535becf26364431e50f84337393bc357c54663ecd37a782e41bc39fc532d5e10c817752c33", - "06489029253e9fd3aec82c196624342279049ceb3f21fd8c7d73c37d120de61530ba45d7f57de164b3aa9ece4b77a8904082bda778407df26d1241d8e5cf2e9cf7a49102dd52135c07ef99e633b2848f81d3bbb9d291e6ea6a7652efb15f189d795b72dfef7b53cb39a6208babe70df2a6dd97f9a9c0cb4a5db69df5229872ac0831d61e841d524e544f908c340bd58e500a50c4a2217580795f4d353dee2d34e644b746b9f82276c8f72826491ab372301ad37817bed53aa717e639f8418b63c61a73afaf94c56913006bc1df239fd5d944e2c21c01e3278b1699df9c4290bdafc72b98fe4b97278f0eae2ba038a2d60064cd25924c14665cc237834039da18c5d05045a2b15b194640d6871bb714f4693ee2ee8d0e5861ec969310aa2bcc77" + "51ffd96b532bbf0a52b2f58afc18ea4631cc40419d32597122eebe31ee1df6cba9c17a30ef9df309864b767846b25190d6cff3326ad412177465afe2d9b245fc2eda6f2956d453e946dd19aef600c5337804eafaa971135602654f9b1c5e5e95494ef161130babce8b722a1b512c4fe35097717d88ea9fde6f0097d1646d708974d3e7bf369e9352cfe2cc5f1bf7de4a389bfc09ced073301f454dfb68bbd9745550934dff9f5031fcb41a176b01a1a0f72fab00114358f9bee422aaafd8c85de6c749455ea26f81a09a7c2ff60aef157f916ab3b85d28f1116f68b58a839db01715326d3550cedd5942c25930fb8556480b6bfc578b3f462622c6654c36855d01bc14f27592007e72a8d19c0639e2746df560f6d79aa2e90efa9ba118796af2", + "aab8956a8796a121e384dd5b9dc2e1961d37dff05213f189870409c73072cc33141a07a44f86f00b2cda02dd817a2f8504e93b67d3b947f76d9bf7ac6a259e4d5a3e85c1d31a279ed84cdc4d85c2d8f5177d390dad992d6e381d9d8f35f79b55198aa0dfed40b6a0773b3ce324359ebfbf7b5498e801f9b3adc6854806dfaf17bd42b28252d079fcc9047fcdd0d0b7d226b0f9ec05f52e47c57f1cf6ce46487832a265151e0a70f0453c6eedae44e35e48fae2f49acf7f531017159d444818eaabc29dfbf1f30c7fd1ea576051d19430a9084df7dd1f3fce8eea34738afa85aae4c0a111242a58794b041e62036641582ad14b4e015b35082a9189535becf263fb887dfc44af8c910acc8545516e3d13c78c31c7d7080e2f9a585d6f05e415fe", + "06489029253e9fd3aec82c1966243422c32556c0bf57cfcf78aec3149e71f09f30ba45d7f57de164b3aa9ece4b77a8907aa4ebccc5a581eacc2d8af20b8f5c5af7a49102dd52135c07ef99e633b2848fbf06866c3bd7d85766aac2ff3c6bf144795b72dfef7b53cb39a6208babe70df27dc49fb28313528fed181e7684728615567cedbb7d1089b899b683080f4a36133e725606c5001bc64858af350e9328b2b6375429cbcc183b54d9c4b775967ce7993d57109d857b648d2e1b0243a54906fbf4323ed4ab3b9837913ad57c14bdd9d704ff6ad5190e6857643973bd52b021afc72b98fe4b97278f0eae2ba038a2d60064cd25924c14665cc237834039da183edfa8ec3a3b00e3869e37a2f80afd560c83879d31ca4485740eea6554e0a6da" ] ], - "public_share": "8f4a5eed4b1e0e0ebaab6a40b65d4241a95c71dfb8f60fcb6bd19f45194478af64431e50f84337393bc357c54663ecd37a782e41bc39fc532d5e10c817752c33c5d05045a2b15b194640d6871bb714f4693ee2ee8d0e5861ec969310aa2bcc77", + "public_share": "01bc14f27592007e72a8d19c0639e2746df560f6d79aa2e90efa9ba118796af2fb887dfc44af8c910acc8545516e3d13c78c31c7d7080e2f9a585d6f05e415fe3edfa8ec3a3b00e3869e37a2f80afd560c83879d31ca4485740eea6554e0a6da", "rand": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf" } ], From 56cdc6f4f357145c81a28c6b5f277278b0b07ec4 Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 28 Oct 2025 14:56:13 -0500 Subject: [PATCH 4/5] Fix documentation on type aliases --- src/vdaf/prio3.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vdaf/prio3.rs b/src/vdaf/prio3.rs index 1e36c4254..d447d2dee 100644 --- a/src/vdaf/prio3.rs +++ b/src/vdaf/prio3.rs @@ -148,7 +148,7 @@ impl Prio3SumVecMultithreaded { } } -/// The sum type. Each measurement is an integer in `[0,2^bits)` for some `0 < bits < 64` and the +/// The sum type. Each measurement is an integer in `[0, max_measurement]` and the /// aggregate is the sum. pub type Prio3Sum = Prio3, XofTurboShake128, 32>; @@ -344,7 +344,7 @@ impl Prio3MultihotCountVecMultithreaded { } } -/// The average type. Each measurement is an integer in `[0,2^bits)` for some `0 < bits < 64` and +/// The average type. Each measurement is an integer in `[0, max_measurement]` and /// the aggregate is the arithmetic average. pub type Prio3Average = Prio3, XofTurboShake128, 32>; From b08e00779422207e4e43e6d52ddc4ab001162989 Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 28 Oct 2025 15:49:45 -0500 Subject: [PATCH 5/5] Simplify range checking in MultihotCountVec --- src/flp/types.rs | 110 ++++++++++++------ src/vdaf/mastic.rs | 1 + .../test_vec/15/Prio3MultihotCountVec_0.json | 4 +- .../test_vec/15/Prio3MultihotCountVec_1.json | 8 +- .../test_vec/15/Prio3MultihotCountVec_2.json | 44 +++---- 5 files changed, 102 insertions(+), 65 deletions(-) diff --git a/src/flp/types.rs b/src/flp/types.rs index d380c8fab..774153d61 100644 --- a/src/flp/types.rs +++ b/src/flp/types.rs @@ -2,7 +2,10 @@ //! A collection of [`Type`] implementations. -use crate::field::{FieldElementWithIntegerExt, FieldError, Integer, NttFriendlyFieldElement}; +use crate::field::{ + FieldElementWithInteger, FieldElementWithIntegerExt, FieldError, Integer, + NttFriendlyFieldElement, +}; use crate::flp::gadgets::{Mul, ParallelSumGadget, PolyEval}; use crate::flp::{Flp, FlpError, Gadget, Type}; use crate::polynomial::poly_range_check; @@ -533,7 +536,10 @@ where /// at most `max_weight` true values, and the aggregate is a histogram counting the number of true /// values at each position across all measurements. #[derive(PartialEq, Eq)] -pub struct MultihotCountVec { +pub struct MultihotCountVec +where + F: FieldElementWithInteger, +{ // Parameters /// The number of elements in the list of booleans length: usize, @@ -545,7 +551,8 @@ pub struct MultihotCountVec { // Calculated from parameters gadget_calls: usize, bits_for_weight: usize, - offset: usize, + last_weight: F::Integer, + last_weight_field: F, phantom: PhantomData<(F, S)>, } @@ -586,16 +593,27 @@ impl>> MultihotCountV "max_weight cannot be zero".to_string(), )); } + let Ok(max_weight_converted) = F::Integer::try_from(max_weight) else { + return Err(FlpError::InvalidParameter( + "max_weight is too large".to_string(), + )); + }; + if max_weight_converted >= F::modulus() { + return Err(FlpError::InvalidParameter( + "max_weight is greater than the field modulus".to_string(), + )); + } // The bitlength of a measurement is the number of buckets plus the bitlength of the max // weight let bits_for_weight = max_weight.ilog2() as usize + 1; let meas_length = num_buckets + bits_for_weight; + let last_weight = max_weight_converted + - ((F::Integer::one() << (bits_for_weight - 1)) - F::Integer::one()); + let last_weight_field = F::from(last_weight); // Gadget calls is ⌈meas_length / chunk_length⌉ let gadget_calls = meas_length.div_ceil(chunk_length); - // Offset is 2^max_weight.bitlen() - 1 - max_weight - let offset = (1 << bits_for_weight) - 1 - max_weight; Ok(Self { length: num_buckets, @@ -603,21 +621,23 @@ impl>> MultihotCountV chunk_length, gadget_calls, bits_for_weight, - offset, + last_weight, + last_weight_field, phantom: PhantomData, }) } } -// Cannot autoderive clone because it requires F and S to be Clone, which they're not in general -impl Clone for MultihotCountVec { +// Cannot autoderive clone because it requires S to be Clone, which does not generally hold +impl Clone for MultihotCountVec { fn clone(&self) -> Self { Self { length: self.length, max_weight: self.max_weight, chunk_length: self.chunk_length, bits_for_weight: self.bits_for_weight, - offset: self.offset, + last_weight: self.last_weight, + last_weight_field: self.last_weight_field, gadget_calls: self.gadget_calls, phantom: self.phantom, } @@ -658,14 +678,10 @@ where // Check that the elements of `input` sum to at most `max_weight`. let count_vec = &input[..self.length]; let weight = count_vec.iter().fold(F::zero(), |a, b| a + *b); - let offset_weight_reported = F::decode_bitvector(&input[self.length..])?; + let weight_reported = + decode_range_checked_int(&input[self.length..], self.last_weight_field)?; - // From spec: weight_check = self.offset*shares_inv + weight - weight_reported - let weight_check = { - let offset = F::from(F::valid_integer_try_from(self.offset)?); - let shares_inv = F::from(F::valid_integer_try_from(num_shares)?).inv(); - offset * shares_inv + weight - offset_weight_reported - }; + let weight_check = weight - weight_reported; Ok(vec![range_check, weight_check]) } @@ -722,20 +738,24 @@ where ))); } + let mut encoded = Vec::with_capacity(self.length + self.bits_for_weight); + // Convert bool vector to field elems - let multihot_vec = measurement - .iter() + encoded.extend(measurement.iter().map(|bit| { // We can unwrap because any Integer type can cast from bool - .map(|bit| F::from(F::valid_integer_try_from(*bit as usize).unwrap())); + F::from(F::valid_integer_try_from(*bit as usize).unwrap()) + })); - // Encode the measurement weight in binary (actually, the weight plus some offset) - let offset_weight_bits = { - let offset_weight_reported = F::valid_integer_try_from(self.offset + weight_reported)?; - F::encode_as_bitvector(offset_weight_reported, self.bits_for_weight)? - }; + // Encode the measurement weight in a modified binary form + encode_range_checked_int::( + F::valid_integer_try_from(weight_reported)?, + self.bits_for_weight, + self.last_weight, + &mut encoded, + )?; // Report the concat of the two - Ok(multihot_vec.chain(offset_weight_bits).collect()) + Ok(encoded) } fn decode_result( @@ -1337,28 +1357,31 @@ mod tests { let one = TestField::one(); let nine = TestField::from(9); - let encoded_weight_plus_offset = |weight| { + let encoded_weight = |weight| { let bits_for_weight = max_weight.ilog2() as usize + 1; - let offset = (1 << bits_for_weight) - 1 - max_weight; - TestField::encode_as_bitvector( - ::Integer::try_from(weight + offset).unwrap(), + let last_weight = max_weight - ((1 << (bits_for_weight - 1)) - 1); + let mut out = Vec::with_capacity(bits_for_weight); + encode_range_checked_int( + ::Integer::try_from(weight).unwrap(), bits_for_weight, + ::Integer::try_from(last_weight).unwrap(), + &mut out, ) - .unwrap() - .collect::>() + .unwrap(); + out }; assert_eq!( multihot_instance .encode_measurement(&vec![true, true, false]) .unwrap(), - [&[one, one, zero], &*encoded_weight_plus_offset(2)].concat(), + [&[one, one, zero], &*encoded_weight(2)].concat(), ); assert_eq!( multihot_instance .encode_measurement(&vec![false, true, true]) .unwrap(), - [&[zero, one, one], &*encoded_weight_plus_offset(2)].concat(), + [&[zero, one, one], &*encoded_weight(2)].concat(), ); // Round trip @@ -1403,20 +1426,33 @@ mod tests { &[zero, zero, zero], ); + // Test alternate encodings of the weight. Note that max_weight = 2 means we will encode the + // claimed weight in two field elements, both of which have a weight of one. + TypeTest::expect_valid::( + &multihot_instance, + &[one, zero, zero, one, zero], + &[one, zero, zero], + ); + TypeTest::expect_valid::( + &multihot_instance, + &[one, zero, zero, zero, one], + &[one, zero, zero], + ); + // Test invalid inputs. // Not binary TypeTest::expect_invalid::( &multihot_instance, - &[&[zero, zero, nine], &*encoded_weight_plus_offset(1)].concat(), + &[&[zero, zero, nine], &*encoded_weight(1)].concat(), ); // Wrong weight TypeTest::expect_invalid::( &multihot_instance, - &[&[zero, zero, one], &*encoded_weight_plus_offset(2)].concat(), + &[&[zero, zero, one], &*encoded_weight(2)].concat(), ); - // We cannot test the case where the weight is higher than max_weight. This is because - // weight + offset cannot fit into a bitvector of the correct length. In other words, being + // We cannot test the case where the weight is higher than max_weight. This is because the + // all-ones bitvector of the correct length decodes to max_weight. In other words, being // out-of-range requires the prover to lie about their weight, which is tested above } diff --git a/src/vdaf/mastic.rs b/src/vdaf/mastic.rs index 46e8e0506..ecd1ea249 100644 --- a/src/vdaf/mastic.rs +++ b/src/vdaf/mastic.rs @@ -1678,6 +1678,7 @@ mod tests { } #[test] + #[ignore = "Test vector needs to be updated"] fn multihot_count_vec_0() { check_test_vec( 0xFFFF0005, diff --git a/src/vdaf/test_vec/15/Prio3MultihotCountVec_0.json b/src/vdaf/test_vec/15/Prio3MultihotCountVec_0.json index 3668ccc71..b1dd16ab5 100644 --- a/src/vdaf/test_vec/15/Prio3MultihotCountVec_0.json +++ b/src/vdaf/test_vec/15/Prio3MultihotCountVec_0.json @@ -89,8 +89,8 @@ ], "prep_shares": [ [ - "0c82e0cc5f690b9caafa428dd6d85ec0cb91386cb2e980e5475e84dc83a874724d0ec28fc8583fcd3d2049ed82fe4cb49b774302bf9e3f22840fdcae9eda08edf34af1e39cf607549e72d9603c9064bd1ce6bcc5c3cff0cd2404afaa25d39fbef626f32389f3abd8f1007f22683246938f85d46fdcf067e79c9b6b088a0c70ba", - "f57d1f33a096f4633905bd722927a13f27c3d26278454e1a5238c31d07b79cfb65698f64c871fc3ae4f3ec5c948d0436d2d857e9751199e9364d6f9097174bf6f551d066f30ae33ed61f9b4bed3609d6fd20479675bf4583e46fa4df4e93182f5728b4e324470bb29993bf18e20714421c8e06f4c0622e3641eb50f24fed1117" + "b7af36c9f877db811c224b99e698ea3ecb91386cb2e980e5475e84dc83a874724d0ec28fc8583fcd3d2049ed82fe4cb49b774302bf9e3f22840fdcae9eda08edf34af1e39cf607549e72d9603c9064bd1ce6bcc5c3cff0cd2404afaa25d39fbef626f32389f3abd8f1007f22683246938f85d46fdcf067e79c9b6b088a0c70ba", + "4a50c9360788247ec7ddb466196715c127c3d26278454e1a5238c31d07b79cfb65698f64c871fc3ae4f3ec5c948d0436d2d857e9751199e9364d6f9097174bf6f551d066f30ae33ed61f9b4bed3609d6fd20479675bf4583e46fa4df4e93182f5728b4e324470bb29993bf18e20714421c8e06f4c0622e3641eb50f24fed1117" ] ], "public_share": "f626f32389f3abd8f1007f22683246938f85d46fdcf067e79c9b6b088a0c70ba5728b4e324470bb29993bf18e20714421c8e06f4c0622e3641eb50f24fed1117", diff --git a/src/vdaf/test_vec/15/Prio3MultihotCountVec_1.json b/src/vdaf/test_vec/15/Prio3MultihotCountVec_1.json index 2adcb5fbb..51e6a8fda 100644 --- a/src/vdaf/test_vec/15/Prio3MultihotCountVec_1.json +++ b/src/vdaf/test_vec/15/Prio3MultihotCountVec_1.json @@ -143,10 +143,10 @@ ], "prep_shares": [ [ - "3d641c737846ac6347415a39f0460706161b78f45441c4f571c675ad977c1e569acfdbefed88b73e37d374da9b35abf7001afb1320dc90678b166811f357c7ec30a0a8be486b56d79d35d4a84f5e51864b829f9c74d386e114fd8592d083b93313a2198ec71058793b0405c971d3f9bca7c044481ad26366abdf9a305efe9eeefe81d25365b05a7d6f2cfd118c387e52584e3fc90e73acc0c17673b63bf98656", - "ff861e22d4bedb6cb50fd8d45398283fc31e12b09efa9b1d25f9c9b1ae98d2df263eebbea09201393c0c4f56e4797c22bf656006ee88b2a3873340c5821753d0bab172e5a332467bc77ff5bb585c4209900f1790247cd23eb1c3d4a0e314466cf96c4358c10e3d54bcdb9cf9fe3421d302c84b82f9b7aacbce9c9411539265961c03081b9e0b8b0a5dfdec6485969578f8704a628d19d074992f4a7374e9d534", - "0f67a601dcedd6767d4d28a6ccf47249444fb33d24d5949ed3691d49e1b87f4f3c3d080f87ea23f04d73dd2d65a2c058b221d50bbe74a3fb8ce8b7dc8c4fcb9cff59b081e848f598fd8256091b56b30cc9ad83d14e35b4aa58390d0deecbc452ca662416b4648fa177154ea775bf07e09f45276e775cb1105c81ef86c26e3b00d462ef6d88b6578c2b1ffb6471ab9d20379901919c448fb43c4463b26de3422d", - "b6ad1e69d70ca1b86961a54bef2b5d71e42954395b808a34b8747594131bf6212199d7d40829fdff5745dffd4fdf781fd9cad9d28c45e8053b25a5955b941fb6ae0172cfc2bd07f81108815a8772bf0ecf24fa93147007bdae65fb6384544be21e13d421a9685db56769a24a029d4791a8207cddd30e695e44c1fd9c9eac1ab10ff631cd5510a3b15c117d3914e8943dee24437b6abc6c04bd58b4d6239185aa" + "b66bd48f329044e136261e5bcec49314161b78f45441c4f571c675ad977c1e569acfdbefed88b73e37d374da9b35abf7001afb1320dc90678b166811f357c7ec30a0a8be486b56d79d35d4a84f5e51864b829f9c74d386e114fd8592d083b93313a2198ec71058793b0405c971d3f9bca7c044481ad26366abdf9a305efe9eeefe81d25365b05a7d6f2cfd118c387e52584e3fc90e73acc0c17673b63bf98656", + "4e90e8304a1ea50968dec5e0f42ccf69c31e12b09efa9b1d25f9c9b1ae98d2df263eebbea09201393c0c4f56e4797c22bf656006ee88b2a3873340c5821753d0bab172e5a332467bc77ff5bb585c4209900f1790247cd23eb1c3d4a0e314466cf96c4358c10e3d54bcdb9cf9fe3421d302c84b82f9b7aacbce9c9411539265961c03081b9e0b8b0a5dfdec6485969578f8704a628d19d074992f4a7374e9d534", + "fed83a1da5e0b69fee2079168a47280e444fb33d24d5949ed3691d49e1b87f4f3c3d080f87ea23f04d73dd2d65a2c058b221d50bbe74a3fb8ce8b7dc8c4fcb9cff59b081e848f598fd8256091b56b30cc9ad83d14e35b4aa58390d0deecbc452ca662416b4648fa177154ea775bf07e09f45276e775cb1105c81ef86c26e3b00d462ef6d88b6578c2b1ffb6471ab9d20379901919c448fb43c4463b26de3422d", + "ff2a0822de705f7556daa2adb2c67473e42954395b808a34b8747594131bf6212199d7d40829fdff5745dffd4fdf781fd9cad9d28c45e8053b25a5955b941fb6ae0172cfc2bd07f81108815a8772bf0ecf24fa93147007bdae65fb6384544be21e13d421a9685db56769a24a029d4791a8207cddd30e695e44c1fd9c9eac1ab10ff631cd5510a3b15c117d3914e8943dee24437b6abc6c04bd58b4d6239185aa" ] ], "public_share": "fe81d25365b05a7d6f2cfd118c387e52584e3fc90e73acc0c17673b63bf986561c03081b9e0b8b0a5dfdec6485969578f8704a628d19d074992f4a7374e9d534d462ef6d88b6578c2b1ffb6471ab9d20379901919c448fb43c4463b26de3422d0ff631cd5510a3b15c117d3914e8943dee24437b6abc6c04bd58b4d6239185aa", diff --git a/src/vdaf/test_vec/15/Prio3MultihotCountVec_2.json b/src/vdaf/test_vec/15/Prio3MultihotCountVec_2.json index 8063f8ad0..4dd5df6a9 100644 --- a/src/vdaf/test_vec/15/Prio3MultihotCountVec_2.json +++ b/src/vdaf/test_vec/15/Prio3MultihotCountVec_2.json @@ -218,7 +218,7 @@ "prep": [ { "input_shares": [ - "e2bb7419a8ac96a1c6def1bed78dcb074557af87236442363aa49be4fd351b11b64bede210be55b253caa20a0f75703e295aa329cd650b825d3d4492d46d2fb362d5c7a84cb3dc77420ae9fb319a83b9195ed94b3fee03d209e78f1b2561041ab435529c98fc7c8c876eb82fd65a31fc66cf7dff4a43e15165bcaed22955b547461b80bb28663b502ad8b1536aa6d3cf8e705bd868a6285c8f72784c197180fdcb1b50029d910e62f6d3bebbd091725f687ed53430cb0818cdada631d9bd1e370ab5a6c2a2b6d543e0e918131c67aedd5b77cb75ce71d8c8dd5ec9028440226d124bc44458e5c4e329096c1ab250ff75b66121e927d624d471d2e7e648928016920efc2d378dc0e8ee13a36d87fbdd35d4a88e6c937da0cc54fd49e9e3f4f4e971bda86ce701e9ab267195ca19bd9b318358d9d6de83a3f8be79f370a3aba801a3d79af7d7df1fb0d61dffd8d00627f7c75fc765e1ec4579c1fb4c907feff49b99198983ece8440b5d6ea9fde97a2020094a42dac99c8f0c1a6267d25128b21b404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f", + "e2bb7419a8ac96a1c6def1bed78dcb074557af87236442363aa49be4fd351b11b64bede210be55b253caa20a0f75703e295aa329cd650b825d3d4492d46d2fb361d5c7a84cb3dc77420ae9fb319a83b91a5ed94b3fee03d209e78f1b2561041ab335529c98fc7c8c876eb82fd65a31fc66cf7dff4a43e15165bcaed22955b547461b80bb28663b502ad8b1536aa6d3cf100aaf35d2572cb484e6f6a733a19bed3277c8cecd02549c9aafcaa67edc96b66cd479d8a298109ddc44183c2f765ba1999616915eea66b93eeee3e44c93be539e402b22b317f14642f889b7fee5227748754446f1727e2f43b1925920dc19cff392cae98892f083669132ede33faf5f920efc2d378dc0e8ee13a36d87fbdd35520f3b0f2acc9c745f89cb8dc9c4d9f90b6230a0b690a371669589df6b7277da800235336cb69b7393e281664df36b9713f62a291cac8e3a94193407a0da1681849667b9fc462dfb5c628cdb044af49164ef0882535b8bbf27c682be7bef05c7cd1899d968e0c35c09a31cccb67a83d2404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" ], "measurement": [ @@ -233,20 +233,20 @@ "1f448be65753695e1d210e41287234f8bda85078dc9bbdc9a95b641b02cae4ee4cb4121def41aa4d90355df5f08a8fc1d8a55cd6329af47d86c2bb6d2b92d04c" ], "prep_messages": [ - "1cb5c0b55decfe04be8c9c84c9e29614449ed43534727e7f6189a7206287bf59" + "3dc643ecf8f6ad3660b29d9d3715ce8e5c746b94b46086b16c781f4b2e07b833" ], "prep_shares": [ [ - "e54359db132ef59eec785c12afbcd0c41095ec67b32f42ca286f3dba81d2f4d52a403e1b48dfa7f4a5a6d23ae37d1051dce6452e9ae476eb0764deecce8a40db7b547c43a9891dd84dbbbfe39840e7baabd2e24b618d91e6404723c5cd8ae26c", - "1cbca624ecd10a61f786a3ed50432f3bda4bbbc57edf2cddf1ff2a876ff1b8a00822fcd3fd0c9087a94588084d124e91105ac0f6e69e7f327f9c989a03c990fa59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091" + "b2312fb53d6b6d2e38dcca207a5c8a0c411dd975227b670eb133ffc1defdddcd36002eb65714644f33a8929b58abe33c9bb5be1324f04c3da794ebbadeec2056f7ea985b1d06b33697bc750c353fa44aefc1d7faca68c80f34f81d5a7749cdfe", + "4fced04ac29492d1ab2335df85a375f3a6cd2a4cfac74518920f00bc958423950822fcd3fd0c9087a94588084d124e91105ac0f6e69e7f327f9c989a03c990fa59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091" ] ], - "public_share": "7b547c43a9891dd84dbbbfe39840e7baabd2e24b618d91e6404723c5cd8ae26c59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091", + "public_share": "f7ea985b1d06b33697bc750c353fa44aefc1d7faca68c80f34f81d5a7749cdfe59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091", "rand": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f" }, { "input_shares": [ - "e2bb7419a8ac96a1c6def1bed78dcb074457af87236442363aa49be4fd351b11b64bede210be55b253caa20a0f75703e295aa329cd650b825d3d4492d46d2fb361d5c7a84cb3dc77420ae9fb319a83b9195ed94b3fee03d209e78f1b2561041ab435529c98fc7c8c876eb82fd65a31fc66cf7dff4a43e15165bcaed22955b547461b80bb28663b502ad8b1536aa6d3cf4dd9d294fe4b5dfe6a035bf7c093bc3739e06b1224caa5b68b0a3240016a62d1e13cd4750741b83bf16614e687fb4ad6d08a9104fc57825d867cb6e43082cc5356dc187c4e7ff7bc9f68ccdcd074f42b37f5b9cb574739ec6152bf68e5ef8f1c1e4a446d5dbcb1233c30c7db5ce97888920efc2d378dc0e8ee13a36d87fbdd35144017b0fdd76b2a956c673e3cd2b8af04f98c5c60c95157753a2246e9e4abbf0b9ada95070ef4d47ec085bcf46d7c62dc01b0b57e3e73964c8b6107bceb0881ccfa795f61df2685fff149b632bb22dd746f93fcec86d002252556afb6db8f79a2611f5694b602bd330488dd3dd1b9a9404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f", + "e2bb7419a8ac96a1c6def1bed78dcb074457af87236442363aa49be4fd351b11b64bede210be55b253caa20a0f75703e295aa329cd650b825d3d4492d46d2fb362d5c7a84cb3dc77420ae9fb319a83b9195ed94b3fee03d209e78f1b2561041ab335529c98fc7c8c876eb82fd65a31fc66cf7dff4a43e15165bcaed22955b547461b80bb28663b502ad8b1536aa6d3cf7bc9056633ab2b031a5d399457514ae7da0d32c9f12464c3d7b2eabf462cfb45fd9db58fb4d6f0a90ef96778ea2fc8a7501c3c52d86cc221275f194d9e01603f4035adf04e98e17a4f13c5632fcc6e740e824e0b6dc3bda12097568be3dda1718fb6e2e512947487314d84f3883e638a920efc2d378dc0e8ee13a36d87fbdd35e64fe4dec8789d25e61289a1a5142b0062cbc6a5926e934a459269c6a322134bef38f97b5a78bb66612e322a9239ff905c700568a22933d2aba8fe9e4e6c7595e2a1e5ea60c63cc74f47512fd463a8949de2febcd70a4c4d66e0be8cb8ed7d2431f580dddede3f593ee7cac5117ccfa7404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" ], "measurement": [ @@ -261,20 +261,20 @@ "1f448be65753695e1d210e41287234f8bda85078dc9bbdc9a95b641b02cae4ee4cb4121def41aa4d90355df5f08a8fc1d8a55cd6329af47d86c2bb6d2b92d04c" ], "prep_messages": [ - "c24bc83b6d97bf557b590fea3e93b567b122a1cd957bcaa9aec448aca7726899" + "116cdaecf556d28e4af4bba9ff74b63cf660eed44f6d654139c7ce029d9fc340" ], "prep_shares": [ [ - "e54359db132ef59eec785c12afbcd0c4bc8093f51d55c746fd0ddc2e937ec2f330b04b8b772f62ab1ec1adc762c94ff9608a58476c33ec43cbd673643576dd2e42ab6d3c84a37c14bfadd7d17006387b1398149b4d736d6727f455ddeb0e8d62", - "1cbca624ecd10a61f786a3ed50432f3b96ae6b20fffa93bcf425c53e822b4ff50822fcd3fd0c9087a94588084d124e91105ac0f6e69e7f327f9c989a03c990fa59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091" + "b2312fb53d6b6d2e38dcca207a5c8a0c3d0bb4dacdf87d1420f1d12364403acae99a3687e4f4b9102b03fa239d3c579d03441a6bd377b03fd626d58c62f20d8b93a17249034c145e2be9a60eb0d9bdfe8cc950c5573f8d1595ff39434485cd7e", + "4fced04ac29492d1ab2335df85a375f33d4f0cf18e52f25e74f32a504a5463e40822fcd3fd0c9087a94588084d124e91105ac0f6e69e7f327f9c989a03c990fa59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091" ] ], - "public_share": "42ab6d3c84a37c14bfadd7d17006387b1398149b4d736d6727f455ddeb0e8d6259339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091", + "public_share": "93a17249034c145e2be9a60eb0d9bdfe8cc950c5573f8d1595ff39434485cd7e59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091", "rand": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f" }, { "input_shares": [ - "e2bb7419a8ac96a1c6def1bed78dcb074457af87236442363aa49be4fd351b11b54bede210be55b253caa20a0f75703e295aa329cd650b825d3d4492d46d2fb362d5c7a84cb3dc77420ae9fb319a83b91a5ed94b3fee03d209e78f1b2561041ab335529c98fc7c8c876eb82fd65a31fc66cf7dff4a43e15165bcaed22955b547461b80bb28663b502ad8b1536aa6d3cf4025a91e2e42deba4c317240c77fb80fde5dcd86b144bb2df213d72a8bf2baea3a4dd9ae180d83470a22d9d4eaa1b0c4dbddfc151145b025cc0ce900a1bd0c9baadd792e2991654a51e51ead894211fc50964f986c2042f74a1fda80c3ecf0f412cf7551c6f265123271a4353820ee94920efc2d378dc0e8ee13a36d87fbdd3521f44026cee1ea6db33e50f535e6bcd75f7b2be8d24e3ce00e317d5b5f5c53a6b289d55cf64129c96505c1cd91c71674d1ae44a4695145ce06fb2eeb4bb0c83978f918ad86cdb8f74d75f7e579ed050d5ccefd2fd8adc7f71f583b97d8de2ea1aedced712b804ece3dc3aa83629a449d404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f", + "e2bb7419a8ac96a1c6def1bed78dcb074457af87236442363aa49be4fd351b11b54bede210be55b253caa20a0f75703e295aa329cd650b825d3d4492d46d2fb361d5c7a84cb3dc77420ae9fb319a83b9195ed94b3fee03d209e78f1b2561041ab335529c98fc7c8c876eb82fd65a31fc66cf7dff4a43e15165bcaed22955b547461b80bb28663b502ad8b1536aa6d3cf2677fdaf864ea67684590e625081a5bd03ece14213c8de17c7d230c817a717714fb6952ded21ade5876e84740b6c56b4244a4eb46c56e1a6729146ad7eedca31957ece7601be9f16fd8f2ffaeb8e27c7fc97b6581691d4f07fb4cb6310e74e47291193d2256af5d513c7db7b00a64bad920efc2d378dc0e8ee13a36d87fbdd353ba2ec9475d522b27b16b4d3ace4cf2939ed162c71cb18f6557223bed2a7f61f9d2019de212dff2ae8b8152e71fd70848842f3050e40144d6076d13e6e800aa38d58c464aea07e2ba2cae69817a1ef41afcc966f2e3d35fe06c349b48be4d04e979ad0f0cb08bf0a5c6d733d9a14e784404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" ], "measurement": [ @@ -289,20 +289,20 @@ "1f448be65753695e1d210e41287234f8bda85078dc9bbdc9a95b641b02cae4ee4cb4121def41aa4d90355df5f08a8fc1d8a55cd6329af47d86c2bb6d2b92d04c" ], "prep_messages": [ - "c3b3331981af8ffa017c3fc4acdf8275c2dd31484200de3098f3e9560d00a943" + "a53b7ba7396eb3f60b343b441f7bbb32c8a8b41910983a53ca69dccf15f5b70a" ], "prep_shares": [ [ - "e54359db132ef59eec785c12afbcd0c424c727ac2cdaafc3813020484c7bc9b6c45ada8371c5d4dbd4f9d77e2064e8061992d56621092be95a40e591a2615d8ba8b2abd7d94ff6a85516e59a79b71c229c13b132bd251e1302a6fe5d02817927", - "1cbca624ecd10a61f786a3ed50432f3b2efb430cd6b5d98874bfc62d858c1b060822fcd3fd0c9087a94588084d124e91105ac0f6e69e7f327f9c989a03c990fa59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091" + "b2312fb53d6b6d2e38dcca207a5c8a0c2b7779fca32d60f7ad47a6458e4e24e22953b9d116e35de46be6758aa4d43e9cdf927d8a60e5bd3ae2cede7a9e381446054088f3f048ffae7a8a9751de3351b15aa6ef246d868009c73bdef40f157f6f", + "4fced04ac29492d1ab2335df85a375f32b1c17492bc6edf8a3b76770b8071db90822fcd3fd0c9087a94588084d124e91105ac0f6e69e7f327f9c989a03c990fa59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091" ] ], - "public_share": "a8b2abd7d94ff6a85516e59a79b71c229c13b132bd251e1302a6fe5d0281792759339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091", + "public_share": "054088f3f048ffae7a8a9751de3351b15aa6ef246d868009c73bdef40f157f6f59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091", "rand": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f" }, { "input_shares": [ - "e3bb7419a8ac96a1c6def1bed78dcb074557af87236442363aa49be4fd351b11b64bede210be55b253caa20a0f75703e295aa329cd650b825d3d4492d46d2fb361d5c7a84cb3dc77420ae9fb319a83b91a5ed94b3fee03d209e78f1b2561041ab435529c98fc7c8c876eb82fd65a31fc66cf7dff4a43e15165bcaed22955b547461b80bb28663b502ad8b1536aa6d3cf1d40bde9925d4b17c846dd3594fed83dc892ca94d3c04183fa3e3e9c30b20a8c4747be8800152c9d08ddb4916ad19cfb3bfbf22858f63ff68dbf8f300abcd3c1523cea0e97d0e81f3e130785696b0fd20edd6849bb3aa68707bf11e59d1733ada4ae070d7c35a4aa785b4359d92c94e9920efc2d378dc0e8ee13a36d87fbdd3544d92c5b69c67d113829e5ff68679ca974462edab0d2b58a220616eab99c0305a58ff0820e3a8073674ae51012982a3d71914e9122a0b5fd444888bbe2b10113d09aa8cc188e352261470f0e9ac407379e87e47e8993636763b80333feb3ece81cfd5bb6753d1036f7d80b60c18d9e48404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f", + "e3bb7419a8ac96a1c6def1bed78dcb074557af87236442363aa49be4fd351b11b64bede210be55b253caa20a0f75703e295aa329cd650b825d3d4492d46d2fb362d5c7a84cb3dc77420ae9fb319a83b91a5ed94b3fee03d209e78f1b2561041ab335529c98fc7c8c876eb82fd65a31fc66cf7dff4a43e15165bcaed22955b547461b80bb28663b502ad8b1536aa6d3cf27bdd238612a57ad7ea7d515a079be0ac3d7064c8e666012510cec2f4c0f5bc34e4b715fe0236a205e0d7cf05b3ab6ef683e9a47ec4516eded7525163c9ee93aac2cce698c76675496c0890165f491d3e02c84f70391f3752ddf2e3c62450ec01f11c88d4e29383991f060f9dcec2dec920efc2d378dc0e8ee13a36d87fbdd353a5c170c9bf9717b81c8ec1f5decb6dc7a01f222f62c97fbaf3868569e3fb3cd9e8b3dac2e2b42f0111a1eb2202f1149444ea7728e50df06e591f2d5b0cfeb9976aac47123e8b6ed089a8c919e3b8535cc37c9d0403d16793d98e6db398611d6a19a9b35a3497ca7de43eebfbdcd0446404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f", "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" ], "measurement": [ @@ -317,15 +317,15 @@ "1f448be65753695e1d210e41287234f8bda85078dc9bbdc9a95b641b02cae4ee4cb4121def41aa4d90355df5f08a8fc1d8a55cd6329af47d86c2bb6d2b92d04c" ], "prep_messages": [ - "ffa6aa6631a9caed44243158a9b823cd6d03ccd9c0061e32905f64878a71657b" + "9e61e49687f57762aa897264436563b907077aa75ef761ca34295ccb8330a749" ], "prep_shares": [ [ - "e54359db132ef59eec785c12afbcd0c46afdfeebb2cfb53fe66ec386a655dbc7998879597006242af323ee8edbdc70e9aa8f8db407bca86ae285576865be82a58e7a554c0e2fa5553f86ee96de11b6fa1f973b14695dfffdd21490e09765686d", - "1cbca624ecd10a61f786a3ed50432f3b6dddb72e222cee22981333990002d1cc0822fcd3fd0c9087a94588084d124e91105ac0f6e69e7f327f9c989a03c990fa59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091" + "b2312fb53d6b6d2e38dcca207a5c8a0c10be8162111398d4c58a26f72efd72c752736455ddcb7b8fff653aeb1550788d7528f2af6ca45cf7cafa45662f32d9e0d21e3b56083be77cb791b02ccc202ac57559ecc7ff8e3d840221da2ec3683992", + "4fced04ac29492d1ab2335df85a375f318aff082ba6e6c3d2894e42caea925ff0822fcd3fd0c9087a94588084d124e91105ac0f6e69e7f327f9c989a03c990fa59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091" ] ], - "public_share": "8e7a554c0e2fa5553f86ee96de11b6fa1f973b14695dfffdd21490e09765686d59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091", + "public_share": "d21e3b56083be77cb791b02ccc202ac57559ecc7ff8e3d840221da2ec368399259339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091", "rand": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f" }, { @@ -349,8 +349,8 @@ ], "prep_shares": [ [ - "e54359db132ef59eec785c12afbcd0c4631e1fa996b00e4ef539d7b7e668113d9b63c65b32e40c5f03b4f8f527ad35bc595cdf351c8fb3f0f6ac9d6701a1bac7718dc7f5c50b4119fb6c3c767cae0c30a69a3166f4c6ecb28c535766c93dbb2e", - "1cbca624ecd10a61f786a3ed50432f3b7f34b51d5bf17a64064e62b7470b71e00822fcd3fd0c9087a94588084d124e91105ac0f6e69e7f327f9c989a03c990fa59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091" + "b2312fb53d6b6d2e38dcca207a5c8a0c631e1fa996b00e4ef539d7b7e668113d9b63c65b32e40c5f03b4f8f527ad35bc595cdf351c8fb3f0f6ac9d6701a1bac7718dc7f5c50b4119fb6c3c767cae0c30a69a3166f4c6ecb28c535766c93dbb2e", + "4fced04ac29492d1ab2335df85a375f37f34b51d5bf17a64064e62b7470b71e00822fcd3fd0c9087a94588084d124e91105ac0f6e69e7f327f9c989a03c990fa59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091" ] ], "public_share": "718dc7f5c50b4119fb6c3c767cae0c30a69a3166f4c6ecb28c535766c93dbb2e59339032814730865c9eb4e827d6c696e3e6b53a2039714fa507e920708af091",