in fbpcs/emp_games/attribution/decoupled_aggregation/main.cpp [23:146]
int main(int argc, char* argv[]) {
fbpcs::performance_tools::CostEstimation cost =
fbpcs::performance_tools::CostEstimation("computation_experimental");
cost.start();
folly::init(&argc, &argv);
gflags::ParseCommandLineFlags(&argc, &argv, true);
fbpcf::AwsSdk::aquire();
XLOGF(INFO, "Party: {}", FLAGS_party);
XLOGF(INFO, "Server IP: {}", FLAGS_server_ip);
XLOGF(INFO, "Port: {}", FLAGS_port);
XLOGF(
INFO, "Input secret share path: {}", FLAGS_input_base_path_secret_share);
XLOGF(INFO, "Input clear text path: {}", FLAGS_input_base_path);
XLOGF(INFO, "Output path: {}", FLAGS_output_base_path);
try {
XLOG(INFO) << "Start private aggregation...";
// Private attribution will have a secret share output, which will be the
// input for aggregation game Along with corresponding clearText files
// containing fields that were not a part of attribution game.
auto inputSecretShareFilePaths =
aggregation::private_aggregation::getIOInputFilenames(
FLAGS_num_files,
FLAGS_input_base_path_secret_share,
FLAGS_file_start_index,
FLAGS_use_postfix);
auto inputClearTextFilePaths =
aggregation::private_aggregation::getIOInputFilenames(
FLAGS_num_files,
FLAGS_input_base_path,
FLAGS_file_start_index,
FLAGS_use_postfix);
auto outputFilePaths =
aggregation::private_aggregation::getIOInputFilenames(
FLAGS_num_files,
FLAGS_output_base_path,
FLAGS_file_start_index,
FLAGS_use_postfix);
int16_t concurrency = static_cast<int16_t>(FLAGS_concurrency);
if (FLAGS_party == static_cast<int>(fbpcf::Party::Alice)) {
XLOGF(INFO, "Aggregation Format: {}", FLAGS_aggregators);
XLOG(INFO)
<< "Starting private aggregation as Publisher, will wait for Partner...";
if (FLAGS_use_xor_encryption) {
aggregation::private_aggregation::
startPrivateAggregationApp<emp::ALICE, fbpcf::Visibility::Xor>(
inputSecretShareFilePaths,
inputClearTextFilePaths,
outputFilePaths,
FLAGS_server_ip,
FLAGS_port,
FLAGS_aggregators,
concurrency);
} else {
aggregation::private_aggregation::
startPrivateAggregationApp<emp::ALICE, fbpcf::Visibility::Public>(
inputSecretShareFilePaths,
inputClearTextFilePaths,
outputFilePaths,
FLAGS_server_ip,
FLAGS_port,
FLAGS_aggregators,
concurrency);
}
} else if (FLAGS_party == static_cast<int>(fbpcf::Party::Bob)) {
XLOG(INFO)
<< "Starting private aggregation as Partner, will wait for Publisher...";
if (FLAGS_use_xor_encryption) {
aggregation::private_aggregation::
startPrivateAggregationApp<emp::BOB, fbpcf::Visibility::Xor>(
inputSecretShareFilePaths,
inputClearTextFilePaths,
outputFilePaths,
FLAGS_server_ip,
FLAGS_port,
FLAGS_aggregators,
concurrency);
} else {
aggregation::private_aggregation::
startPrivateAggregationApp<emp::BOB, fbpcf::Visibility::Public>(
inputSecretShareFilePaths,
inputClearTextFilePaths,
outputFilePaths,
FLAGS_server_ip,
FLAGS_port,
FLAGS_aggregators,
concurrency);
}
} else {
XLOGF(FATAL, "Invalid Party: {}", FLAGS_party);
}
cost.end();
XLOG(INFO, cost.getEstimatedCostString());
if (FLAGS_run_name != "" &&
FLAGS_party == static_cast<int>(fbpcf::Party::Alice)) {
XLOGF(
INFO,
"{}",
cost.writeToS3(
FLAGS_run_name,
cost.getEstimatedCostDynamic(
FLAGS_run_name, "", FLAGS_aggregators)));
}
return 0;
} catch (const std::exception& e) {
XLOG(ERR)
<< "Error: Exception caught in Private Aggregation run.\n \t error msg: "
<< e.what()
<< "\n \t input directory: " << FLAGS_input_base_path_secret_share;
return 1;
}
}