1# Description: 2# SecAgg server-specific components. 3 4load("//fcp:config.bzl", "FCP_COPTS") 5load("//fcp/tracing:build_defs.bzl", "tracing_schema_cc_library") 6 7package( 8 default_visibility = ["//fcp:internal"], 9) 10 11tracing_schema_cc_library( 12 name = "tracing_schema", 13 srcs = ["tracing_schema.fbs"], 14) 15 16cc_library( 17 name = "experiments_interface", 18 hdrs = ["experiments_interface.h"], 19 copts = FCP_COPTS, 20 deps = ["@com_google_absl//absl/strings"], 21) 22 23cc_library( 24 name = "experiments_names", 25 hdrs = ["experiments_names.h"], 26 copts = FCP_COPTS, 27) 28 29cc_library( 30 name = "secagg_server_protocol_impl", 31 srcs = ["secagg_server_protocol_impl.cc"], 32 hdrs = ["secagg_server_protocol_impl.h"], 33 copts = FCP_COPTS, 34 deps = [ 35 ":experiments_interface", 36 ":secagg_scheduler", 37 ":secagg_server_metrics_listener", 38 ":secret_sharing_graph", 39 ":send_to_clients_interface", 40 ":server_cc_proto", 41 ":tracing_schema", 42 "//fcp/base", 43 "//fcp/secagg/shared", 44 "//fcp/secagg/shared:cc_proto", 45 "//fcp/tracing", 46 "@com_google_absl//absl/container:flat_hash_map", 47 "@com_google_absl//absl/container:node_hash_map", 48 "@com_google_absl//absl/status", 49 "@com_google_absl//absl/time", 50 ], 51) 52 53cc_library( 54 name = "secagg_server_metrics_listener", 55 hdrs = [ 56 "secagg_server_metrics_listener.h", 57 ], 58 copts = FCP_COPTS, 59 deps = [ 60 ":server_cc_proto", 61 "//fcp/secagg/shared:cc_proto", 62 ], 63) 64 65cc_library( 66 name = "send_to_clients_interface", 67 hdrs = [ 68 "send_to_clients_interface.h", 69 ], 70 copts = FCP_COPTS, 71 deps = [ 72 "//fcp/secagg/shared:cc_proto", 73 ], 74) 75 76cc_library( 77 name = "server", 78 srcs = [ 79 "secagg_server.cc", 80 "secagg_server_aborted_state.cc", 81 "secagg_server_completed_state.cc", 82 "secagg_server_prng_running_state.cc", 83 "secagg_server_r0_advertise_keys_state.cc", 84 "secagg_server_r1_share_keys_state.cc", 85 "secagg_server_r2_masked_input_coll_state.cc", 86 "secagg_server_r3_unmasking_state.cc", 87 "secagg_server_state.cc", 88 "secagg_trace_utility.cc", 89 ], 90 hdrs = [ 91 "secagg_server.h", 92 "secagg_server_aborted_state.h", 93 "secagg_server_completed_state.h", 94 "secagg_server_prng_running_state.h", 95 "secagg_server_r0_advertise_keys_state.h", 96 "secagg_server_r1_share_keys_state.h", 97 "secagg_server_r2_masked_input_coll_state.h", 98 "secagg_server_r3_unmasking_state.h", 99 "secagg_server_state.h", 100 "secagg_trace_utility.h", 101 ], 102 copts = FCP_COPTS, 103 deps = [ 104 ":experiments_interface", 105 ":experiments_names", 106 ":graph_parameter_finder", 107 ":secagg_scheduler", 108 ":secagg_server_metrics_listener", 109 ":secagg_server_protocol_impl", 110 ":secret_sharing_graph", 111 ":secret_sharing_graph_factory", 112 ":send_to_clients_interface", 113 ":server_cc_proto", 114 ":tracing_schema", 115 "//fcp/base", 116 "//fcp/base:scheduler", 117 "//fcp/secagg/server/aes", 118 "//fcp/secagg/shared", 119 "//fcp/secagg/shared:cc_proto", 120 "//fcp/tracing", 121 "@com_google_absl//absl/base:core_headers", 122 "@com_google_absl//absl/container:flat_hash_map", 123 "@com_google_absl//absl/container:flat_hash_set", 124 "@com_google_absl//absl/container:node_hash_set", 125 "@com_google_absl//absl/strings", 126 "@com_google_absl//absl/synchronization", 127 "@com_google_absl//absl/time", 128 ], 129) 130 131cc_library( 132 name = "secret_sharing_graph_factory", 133 hdrs = ["secret_sharing_graph_factory.h"], 134 deps = [ 135 ":secret_sharing_complete_graph", 136 ":secret_sharing_graph", 137 ":secret_sharing_harary_graph", 138 "//fcp/base", 139 ], 140) 141 142cc_library( 143 name = "secret_sharing_graph", 144 hdrs = ["secret_sharing_graph.h"], 145 deps = ["//fcp/base"], 146) 147 148cc_library( 149 name = "secret_sharing_complete_graph", 150 hdrs = ["secret_sharing_complete_graph.h"], 151 deps = [ 152 ":secret_sharing_graph", 153 "//fcp/base", 154 "@com_google_absl//absl/strings", 155 ], 156) 157 158cc_library( 159 name = "secret_sharing_harary_graph", 160 srcs = [ 161 "secret_sharing_harary_graph.cc", 162 "ssl_bit_gen.cc", 163 ], 164 hdrs = [ 165 "secret_sharing_harary_graph.h", 166 "ssl_bit_gen.h", 167 ], 168 deps = [ 169 ":secret_sharing_graph", 170 "//fcp/base", 171 "@boringssl//:crypto", 172 "@com_google_absl//absl/strings", 173 ], 174) 175 176cc_library( 177 name = "graph_parameter_finder", 178 srcs = ["graph_parameter_finder.cc"], 179 hdrs = [ 180 "graph_parameter_finder.h", 181 ], 182 deps = [ 183 ":distribution_utilities", 184 ":server_cc_proto", 185 "//fcp/base", 186 ], 187) 188 189cc_library( 190 name = "distribution_utilities", 191 srcs = ["distribution_utilities.cc"], 192 hdrs = [ 193 "distribution_utilities.h", 194 ], 195 deps = ["//fcp/base"], 196) 197 198cc_test( 199 name = "distribution_utilities_test", 200 srcs = ["distribution_utilities_test.cc"], 201 deps = [ 202 ":distribution_utilities", 203 "//fcp/base", 204 "//fcp/testing", 205 "@com_google_googletest//:gtest_main", 206 ], 207) 208 209cc_test( 210 name = "server-test", 211 size = "small", 212 srcs = [ 213 "secagg_server_test.cc", 214 ], 215 copts = FCP_COPTS, 216 deps = [ 217 ":server", 218 ":server_cc_proto", 219 ":tracing_schema", 220 "//fcp/base", 221 "//fcp/secagg/shared", 222 "//fcp/secagg/shared:cc_proto", 223 "//fcp/secagg/testing:common_mocks", 224 "//fcp/secagg/testing/server:experiments", 225 "//fcp/secagg/testing/server:server_mocks", 226 "//fcp/testing", 227 "//fcp/tracing:test_tracing_recorder", 228 "@com_google_googletest//:gtest_main", 229 ], 230) 231 232cc_test( 233 name = "state-test", 234 size = "small", 235 srcs = [ 236 "secagg_server_aborted_state_test.cc", 237 "secagg_server_completed_state_test.cc", 238 "secagg_server_prng_running_state_test.cc", 239 "secagg_server_r0_advertise_keys_state_test.cc", 240 "secagg_server_r1_share_keys_state_test.cc", 241 "secagg_server_r2_masked_input_coll_state_test.cc", 242 "secagg_server_r3_unmasking_state_test.cc", 243 ], 244 copts = FCP_COPTS, 245 deps = [ 246 ":experiments_interface", 247 ":experiments_names", 248 ":secagg_scheduler", 249 ":secret_sharing_graph_factory", 250 ":send_to_clients_interface", 251 ":server", 252 ":server_cc_proto", 253 "//fcp/base", 254 "//fcp/base:scheduler", 255 "//fcp/secagg/server/aes", 256 "//fcp/secagg/shared", 257 "//fcp/secagg/shared:cc_proto", 258 "//fcp/secagg/testing", 259 "//fcp/secagg/testing:common_mocks", 260 "//fcp/secagg/testing/server:async_runner", 261 "//fcp/secagg/testing/server:experiments", 262 "//fcp/secagg/testing/server:server_mocks", 263 "//fcp/testing", 264 "//fcp/tracing:test_tracing_recorder", 265 "@com_google_absl//absl/container:flat_hash_map", 266 "@com_google_absl//absl/container:flat_hash_set", 267 "@com_google_absl//absl/container:node_hash_map", 268 "@com_google_absl//absl/container:node_hash_set", 269 "@com_google_absl//absl/strings", 270 "@com_google_googletest//:gtest_main", 271 ], 272) 273 274cc_test( 275 name = "secret_sharing_harary_graph_test", 276 srcs = ["secret_sharing_harary_graph_test.cc"], 277 deps = [ 278 ":secret_sharing_graph", 279 ":secret_sharing_graph_factory", 280 "//fcp/testing", 281 "@com_google_absl//absl/status", 282 "@com_google_googletest//:gtest_main", 283 ], 284) 285 286cc_test( 287 name = "secret_sharing_complete_graph_test", 288 srcs = ["secret_sharing_complete_graph_test.cc"], 289 deps = [ 290 ":secret_sharing_graph", 291 ":secret_sharing_graph_factory", 292 "//fcp/testing", 293 "@com_google_absl//absl/status", 294 "@com_google_googletest//:gtest_main", 295 ], 296) 297 298cc_test( 299 name = "graph_parameter_finder_test", 300 srcs = ["graph_parameter_finder_test.cc"], 301 deps = [ 302 ":graph_parameter_finder", 303 ":server_cc_proto", 304 "//fcp/testing", 305 "@com_google_googletest//:gtest_main", 306 ], 307) 308 309cc_library( 310 name = "secagg_scheduler", 311 srcs = [ 312 "secagg_scheduler.cc", 313 ], 314 hdrs = [ 315 "secagg_scheduler.h", 316 ], 317 deps = [ 318 "//fcp/base", 319 "//fcp/base:clock", 320 "//fcp/base:reentrancy_guard", 321 "//fcp/base:scheduler", 322 "@com_google_absl//absl/synchronization", 323 "@com_google_absl//absl/time", 324 ], 325) 326 327cc_test( 328 name = "secagg_scheduler_test", 329 srcs = ["secagg_scheduler_test.cc"], 330 copts = FCP_COPTS, 331 deps = [ 332 ":secagg_scheduler", 333 "//fcp/base", 334 "//fcp/base:scheduler", 335 "//fcp/base:simulated_clock", 336 "@com_google_absl//absl/synchronization", 337 "@com_google_absl//absl/time", 338 "@com_google_googletest//:gtest_main", 339 ], 340) 341 342proto_library( 343 name = "server_proto", 344 srcs = [ 345 "secagg_server_enums.proto", 346 "secagg_server_messages.proto", 347 ], 348 visibility = ["//visibility:public"], 349) 350 351java_proto_library( 352 name = "server_java_proto", 353 deps = [":server_proto"], 354) 355 356cc_proto_library( 357 name = "server_cc_proto", 358 visibility = ["//visibility:public"], 359 deps = [":server_proto"], 360) 361