summaryrefslogtreecommitdiffstats
path: root/third_party/rust/prio/src/vdaf/prio2/server.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:43:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:43:14 +0000
commit8dd16259287f58f9273002717ec4d27e97127719 (patch)
tree3863e62a53829a84037444beab3abd4ed9dfc7d0 /third_party/rust/prio/src/vdaf/prio2/server.rs
parentReleasing progress-linux version 126.0.1-1~progress7.99u1. (diff)
downloadfirefox-8dd16259287f58f9273002717ec4d27e97127719.tar.xz
firefox-8dd16259287f58f9273002717ec4d27e97127719.zip
Merging upstream version 127.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/prio/src/vdaf/prio2/server.rs')
-rw-r--r--third_party/rust/prio/src/vdaf/prio2/server.rs50
1 files changed, 32 insertions, 18 deletions
diff --git a/third_party/rust/prio/src/vdaf/prio2/server.rs b/third_party/rust/prio/src/vdaf/prio2/server.rs
index 11c161babf..9d2871c867 100644
--- a/third_party/rust/prio/src/vdaf/prio2/server.rs
+++ b/third_party/rust/prio/src/vdaf/prio2/server.rs
@@ -101,9 +101,13 @@ pub(crate) fn is_valid_share<F: FftFriendlyFieldElement>(
#[cfg(test)]
mod test_util {
use crate::{
+ codec::ParameterizedDecode,
field::{merge_vector, FftFriendlyFieldElement},
prng::Prng,
- vdaf::prio2::client::proof_length,
+ vdaf::{
+ prio2::client::{proof_length, SerializeError},
+ Share, ShareDecodingParameter,
+ },
};
use super::{generate_verification_message, is_valid_share, ServerError, VerificationMessage};
@@ -133,17 +137,17 @@ mod test_util {
/// Deserialize
fn deserialize_share(&self, share: &[u8]) -> Result<Vec<F>, ServerError> {
let len = proof_length(self.dimension);
- Ok(if self.is_first_server {
- F::byte_slice_into_vec(share)?
+ let decoding_parameter = if self.is_first_server {
+ ShareDecodingParameter::Leader(len)
} else {
- if share.len() != 32 {
- return Err(ServerError::ShareLength);
- }
-
- Prng::from_prio2_seed(&share.try_into().unwrap())
- .take(len)
- .collect()
- })
+ ShareDecodingParameter::Helper
+ };
+ let decoded_share = Share::get_decoded_with_param(&decoding_parameter, share)
+ .map_err(SerializeError::from)?;
+ match decoded_share {
+ Share::Leader(vec) => Ok(vec),
+ Share::Helper(seed) => Ok(Prng::from_prio2_seed(&seed.0).take(len).collect()),
+ }
}
/// Generate verification message from an encrypted share
@@ -194,14 +198,19 @@ mod test_util {
mod tests {
use super::*;
use crate::{
- codec::Encode,
+ codec::{Encode, ParameterizedDecode},
field::{FieldElement, FieldPrio2},
prng::Prng,
vdaf::{
- prio2::{client::unpack_proof_mut, server::test_util::Server, Prio2},
- Client,
+ prio2::{
+ client::{proof_length, unpack_proof_mut},
+ server::test_util::Server,
+ Prio2,
+ },
+ Client, Share, ShareDecodingParameter,
},
};
+ use assert_matches::assert_matches;
use rand::{random, Rng};
fn secret_share(share: &mut [FieldPrio2]) -> Vec<FieldPrio2> {
@@ -286,10 +295,13 @@ mod tests {
let vdaf = Prio2::new(dim).unwrap();
let (_, shares) = vdaf.shard(&data, &[0; 16]).unwrap();
- let share1_original = shares[0].get_encoded();
- let share2 = shares[1].get_encoded();
+ let share1_original = shares[0].get_encoded().unwrap();
+ let share2 = shares[1].get_encoded().unwrap();
- let mut share1_field = FieldPrio2::byte_slice_into_vec(&share1_original).unwrap();
+ let mut share1_field: Vec<FieldPrio2> = assert_matches!(
+ Share::get_decoded_with_param(&ShareDecodingParameter::<32>::Leader(proof_length(dim)), &share1_original),
+ Ok(Share::Leader(vec)) => vec
+ );
let unpacked_share1 = unpack_proof_mut(&mut share1_field, dim).unwrap();
let one = FieldPrio2::from(1);
@@ -304,7 +316,9 @@ mod tests {
};
// reserialize altered share1
- let share1_modified = FieldPrio2::slice_into_byte_vec(&share1_field);
+ let share1_modified = Share::<FieldPrio2, 32>::Leader(share1_field)
+ .get_encoded()
+ .unwrap();
let mut prng = Prng::from_prio2_seed(&random());
let eval_at = vdaf.choose_eval_at(&mut prng);