Skip to content

Commit

Permalink
Serde is now a non-optional dependency
Browse files Browse the repository at this point in the history
Removed the "enable-serde" flag and made Serde a non-optional dependency.
Removed the cfg attributes that depended on the feature since now the
library is included by default.
  • Loading branch information
cberkhoff committed Mar 29, 2024
1 parent 365bb1e commit b069241
Show file tree
Hide file tree
Showing 15 changed files with 57 additions and 111 deletions.
10 changes: 4 additions & 6 deletions ipa-core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ default = [
"ipa-prf",
]
cli = ["comfy-table", "clap"]
enable-serde = ["serde", "serde_json"]
disable-metrics = []
# TODO move web-app to a separate crate. It adds a lot of build time to people who mostly write protocols
# TODO Consider moving out benches as well
Expand All @@ -28,7 +27,6 @@ web-app = [
"base64",
"clap",
"comfy-table",
"enable-serde",
"hyper",
"hyper-rustls",
"rcgen",
Expand All @@ -40,7 +38,7 @@ web-app = [
"tower",
"tower-http",
]
test-fixture = ["enable-serde", "weak-field"]
test-fixture = ["weak-field"]
# Include observability instruments that detect lack of progress inside MPC. If there is a bug that leads to helper
# miscommunication, this feature helps to detect it. Turning it on has some cost.
# If "shuttle" feature is enabled, turning this on has no effect.
Expand Down Expand Up @@ -134,8 +132,8 @@ rustls-pemfile = { version = "1", optional = true }
# we can remove pinning
rustls-webpki = "^0.101.4"
# TODO consider using zerocopy or serde_bytes or in-house serialization
serde = { version = "1.0", optional = true, features = ["derive"] }
serde_json = { version = "1.0", optional = true }
serde = { version = "1.0", features = ["derive"] }
serde_json = { version = "1.0" }
sha2 = "0.10"
shuttle-crate = { package = "shuttle", version = "0.6.1", optional = true }
thiserror = "1.0"
Expand Down Expand Up @@ -179,7 +177,7 @@ bench = false
[[bin]]
name = "ipa_bench"
path = "src/bin/ipa_bench/ipa_bench.rs"
required-features = ["cli", "enable-serde"]
required-features = ["cli"]
bench = false

[[bin]]
Expand Down
2 changes: 0 additions & 2 deletions ipa-core/src/bin/ipa_bench/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@ use std::ops::Range;

use serde::{Deserialize, Serialize};

#[cfg(feature = "enable-serde")]
#[derive(Serialize, Deserialize, Debug)]
pub struct WeightedIndex<T> {
pub index: T,
pub weight: f64,
}

#[cfg(feature = "enable-serde")]
#[derive(Serialize, Deserialize, Debug)]
pub struct Config {
pub devices_per_user: Vec<WeightedIndex<u8>>,
Expand Down
24 changes: 9 additions & 15 deletions ipa-core/src/bin/ipa_bench/models.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ pub type Epoch = u8;
/// An offset in seconds into a given epoch. Using an 32-bit value > 20-bit > 604,800 seconds.
pub type Offset = u32;

#[derive(Debug, Clone)]
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SecretShare {
ss: [CipherText; 3],
}
Expand Down Expand Up @@ -119,8 +118,7 @@ impl SecretSharable for u64 {
}
}

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
/// A timestamp of a source/trigger report represented by epoch and offset.
///
/// Internally, the time is stored in `u32`, but the value is capped at `(Epoch::MAX + 1) * SECONDS_IN_EPOCH - 1`.
Expand Down Expand Up @@ -206,8 +204,7 @@ impl From<EventTimestamp> for u32 {
}
}

#[derive(Clone, Copy, Debug)]
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
pub struct Event {
// An identifier, set in the user agent, which identifies an individual person. This must never be released (beyond
/// the match key provider) to any party in unencrypted form. For the purpose of this tool, however, the value is in
Expand All @@ -222,8 +219,7 @@ pub struct Event {
pub timestamp: EventTimestamp,
}

#[derive(Clone, Copy, Debug)]
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
pub enum GenericReport {
/// An event produced on websites/apps when a user interacts with an ad (i.e. impression, click).
Source {
Expand All @@ -242,22 +238,20 @@ pub enum GenericReport {
},
}

// TODO(taiki): Implement Serialize/Deserialize

#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
#[derive(Serialize, Deserialize)]
enum QueryType {
SourceFanout,
TriggerFanout,
}

#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
#[derive(Serialize, Deserialize)]
enum Node {
Helper1,
Helper2,
Helper3,
}

#[cfg_attr(feature = "enable-serde", derive(Serialize))]
#[derive(Serialize)]
struct IPAQuery {
/// Caller authentication token.
auth_token: PlainText,
Expand All @@ -278,7 +272,7 @@ struct IPAQuery {
reports: Vec<GenericReport>,
}

#[cfg_attr(feature = "enable-serde", derive(Serialize))]
#[derive(Serialize)]
struct SourceFanoutQuery {
query: IPAQuery,

Expand All @@ -299,7 +293,7 @@ impl Debug for SourceFanoutQuery {
}
}

#[cfg_attr(feature = "enable-serde", derive(Serialize))]
#[derive(Serialize)]
struct TriggerFanoutQuery {
query: IPAQuery,

Expand Down
5 changes: 2 additions & 3 deletions ipa-core/src/cli/ipa_output.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
use std::time::Duration;

use serde::{Deserialize, Serialize};
use crate::helpers::query::{IpaQueryConfig, QuerySize};

#[derive(Debug)]
#[cfg_attr(feature = "enable-serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Serialize, Deserialize)]
pub struct QueryResult {
pub input_size: QuerySize,
pub config: IpaQueryConfig,
Expand Down
9 changes: 4 additions & 5 deletions ipa-core/src/cli/noise.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use std::{
fmt::{Debug, Display, Formatter},
};

use serde::{Deserialize, Serialize};
use clap::Args;
use rand::rngs::StdRng;
use rand_core::SeedableRng;
Expand All @@ -30,8 +31,7 @@ pub struct ApplyDpArgs {
cap: u32,
}

#[derive(Debug)]
#[cfg_attr(feature = "enable-serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Serialize, Deserialize)]
pub struct NoisyOutput {
/// Aggregated breakdowns with noise applied. It is important to use unsigned values here
/// to avoid bias/mean skew
Expand All @@ -45,11 +45,10 @@ pub struct NoisyOutput {
#[derive(Debug, Copy, Clone)]
pub struct EpsilonBits(f64);

#[cfg(feature = "enable-serde")]
impl serde::Serialize for EpsilonBits {
impl Serialize for EpsilonBits {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
S: Serializer,
{
serializer.serialize_str(&self.0.to_string())
}
Expand Down
1 change: 0 additions & 1 deletion ipa-core/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ pub enum Error {
#[error("runtime error")]
RuntimeError(JoinError),
#[error("failed to parse json: {0}")]
#[cfg(feature = "enable-serde")]
Serde(#[from] serde_json::Error),
#[error("MPC Infrastructure error: {0}")]
MpcInfraError(#[from] crate::helpers::Error<Role>),
Expand Down
4 changes: 2 additions & 2 deletions ipa-core/src/ff/field.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use std::{
};

use typenum::{U1, U4};
use serde::{Deserialize, Serialize};

use crate::{
protocol::prss::FromRandom,
Expand Down Expand Up @@ -37,8 +38,7 @@ pub trait Field:
const ONE: Self;
}

#[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "enable-serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
pub enum FieldType {
#[cfg(any(test, feature = "weak-field"))]
Expand Down
30 changes: 9 additions & 21 deletions ipa-core/src/helpers/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ mod gateway;
pub(crate) mod prss_protocol;
pub mod stream;
mod transport;

use serde::{Deserialize, Serialize, Serializer};
use std::ops::{Index, IndexMut};

/// to validate that transport can actually send streams of this type
Expand Down Expand Up @@ -81,22 +81,18 @@ pub const MESSAGE_PAYLOAD_SIZE_BYTES: usize = MessagePayloadArrayLen::USIZE;
/// represents a helper's role within an MPC protocol, which may be different per protocol.
/// `HelperIdentity` will be established at startup and then never change. Components that want to
/// resolve this identifier into something (Uri, encryption keys, etc) must consult configuration
#[derive(Copy, Clone, Eq, PartialEq, Hash)]
#[cfg_attr(
feature = "enable-serde",
derive(serde::Deserialize),
serde(try_from = "usize")
)]
#[derive(Copy, Clone, Eq, PartialEq, Hash, Deserialize)]
#[serde(try_from = "usize")]
pub struct HelperIdentity {
id: u8,
}

// Serialize as `serde(transparent)` would. Don't see how to enable that
// for only one of (de)serialization.
impl serde::Serialize for HelperIdentity {
impl Serialize for HelperIdentity {
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
S: Serializer,
{
self.id.serialize(serializer)
}
Expand Down Expand Up @@ -219,26 +215,18 @@ impl<T> IndexMut<HelperIdentity> for Vec<T> {
/// may be `H2` or `H3`.
/// Each helper instance must be able to take any role, but once the role is assigned, it cannot
/// be changed for the remainder of the query.
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "cli", derive(clap::ValueEnum))]
#[cfg_attr(
feature = "enable-serde",
derive(serde::Serialize, serde::Deserialize),
serde(into = "&'static str", try_from = "&str")
)]
#[serde(into = "&'static str", try_from = "&str")]
pub enum Role {
H1 = 0,
H2 = 1,
H3 = 2,
}

#[derive(Clone, Debug)]
#[derive(Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(test, derive(PartialEq, Eq))]
#[cfg_attr(
feature = "enable-serde",
derive(serde::Serialize, serde::Deserialize),
serde(transparent)
)]
#[serde(transparent)]
pub struct RoleAssignment {
helper_roles: [HelperIdentity; 3],
}
Expand Down
29 changes: 6 additions & 23 deletions ipa-core/src/helpers/transport/query/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,13 @@ use crate::{
protocol::{step::Step, QueryId},
};

#[derive(Copy, Clone, Debug, Ord, PartialOrd, Eq, PartialEq)]
#[cfg_attr(feature = "enable-serde", derive(Serialize))]
#[derive(Copy, Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Serialize)]
pub struct QuerySize(u32);

impl QuerySize {
pub const MAX: u32 = 1_000_000_000;
}

#[cfg(feature = "enable-serde")]
impl<'de> Deserialize<'de> for QuerySize {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
Expand Down Expand Up @@ -84,9 +82,8 @@ impl From<QuerySize> for usize {
}
}

#[derive(Copy, Clone, Debug)]
#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(test, derive(PartialEq, Eq))]
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
pub struct QueryConfig {
pub size: QuerySize,
pub field_type: FieldType,
Expand All @@ -99,9 +96,8 @@ pub enum QueryConfigError {
BadQuerySize(#[from] BadQuerySizeError),
}

#[derive(Clone, Debug)]
#[derive(Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(test, derive(PartialEq, Eq))]
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
pub struct PrepareQuery {
pub query_id: QueryId,
pub config: QueryConfig,
Expand All @@ -123,15 +119,10 @@ impl RouteParams<RouteId, NoQueryId, NoStep> for &QueryConfig {
NoStep
}

#[cfg(feature = "enable-serde")]
fn extra(&self) -> Self::Params {
serde_json::to_string(self).unwrap()
}

#[cfg(not(feature = "enable-serde"))]
fn extra(&self) -> Self::Params {
unimplemented!()
}
}

impl From<&QueryConfig> for GatewayConfig {
Expand Down Expand Up @@ -177,15 +168,10 @@ impl RouteParams<RouteId, QueryId, NoStep> for &PrepareQuery {
NoStep
}

#[cfg(feature = "enable-serde")]
fn extra(&self) -> Self::Params {
serde_json::to_string(self).unwrap()
}

#[cfg(not(feature = "enable-serde"))]
fn extra(&self) -> Self::Params {
unimplemented!()
}
}

pub struct QueryInput {
Expand All @@ -199,8 +185,7 @@ impl Debug for QueryInput {
}
}

#[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub enum QueryType {
#[cfg(any(test, feature = "test-fixture", feature = "cli"))]
TestMultiply,
Expand All @@ -225,8 +210,7 @@ impl AsRef<str> for QueryType {

impl Step for QueryType {}

#[derive(Debug, Copy, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "clap", derive(clap::Args))]
pub struct IpaQueryConfig {
#[cfg_attr(feature = "clap", arg(long, default_value = "8"))]
Expand Down Expand Up @@ -331,8 +315,7 @@ impl std::fmt::Display for ContributionBits {
}
}

#[derive(Debug, Copy, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SparseAggregateQueryConfig {
pub contribution_bits: ContributionBits,
pub num_contributions: u32,
Expand Down
3 changes: 1 addition & 2 deletions ipa-core/src/helpers/transport/query/oprf_shuffle.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use serde::{Deserialize, Serialize};

#[derive(Debug, Copy, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct QueryConfig {}
Loading

0 comments on commit b069241

Please sign in to comment.