#[cfg(feature = "server")]
use valar_ypir::scheme::run_ypir_batched;
use clap::Parser;
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
num_items: usize,
item_size_bits: Option<usize>,
num_clients: Option<usize>,
trials: Option<usize>,
#[clap(long, short, action)]
is_simplepir: bool,
out_report_json: Option<String>,
#[clap(long, short, action)]
verbose: bool,
}
#[cfg(feature = "server")]
fn main() {
let args = Args::parse();
let Args {
num_items,
item_size_bits,
num_clients,
trials,
out_report_json,
verbose,
is_simplepir,
} = args;
if verbose {
println!("Running in verbose mode.");
env_logger::Builder::new()
.filter_level(log::LevelFilter::Debug)
.write_style(env_logger::WriteStyle::Always)
.init();
} else {
env_logger::init();
}
let item_size_bits = item_size_bits.unwrap_or(1);
let num_clients = num_clients.unwrap_or(1);
let trials = trials.unwrap_or(5);
if item_size_bits > 8 && !is_simplepir {
panic!("Items can be at must be at most 8 bits.");
}
if is_simplepir {
assert_eq!(num_clients, 1, "SimplePIR variant only supports 1 client.");
}
println!(
"Running YPIR ({}) on a database of {} bits, and performing cross-client batching over {} clients. \n\
The server performance measurement will be averaged over {} trials.",
if is_simplepir { "w/ SimplePIR" } else { "w/ DoublePIR" },
num_items * item_size_bits,
num_clients,
trials
);
let measurement =
run_ypir_batched(num_items, item_size_bits, num_clients, is_simplepir, trials);
println!(
"Measurement completed. See the README for details on what the following fields mean."
);
println!("Result:");
println!("{}", serde_json::to_string_pretty(&measurement).unwrap());
if let Some(out_report_json) = out_report_json {
println!("Writing report to {}", out_report_json);
let mut file = std::fs::File::create(out_report_json).unwrap();
serde_json::to_writer_pretty(&mut file, &measurement).unwrap();
println!("Report written.");
}
}
#[cfg(not(feature = "server"))]
fn main() {
panic!("This binary is only available with the 'server' feature enabled.");
}