Git Product home page Git Product logo

private-join-and-compute's Introduction

Private Join and Compute

This project contains an implementation of the "Private Join and Compute" functionality. This functionality allows two users, each holding an input file, to privately compute the sum of associated values for records that have common identifiers.

In more detail, suppose a Server has a file containing the following identifiers:

Identifiers
Sam
Ada
Ruby
Brendan

And a Client has a file containing the following identifiers, paired with associated integer values:

Identifiers Associated Values
Ruby 10
Ada 30
Alexander 5
Mika 35

Then the Private Join and Compute functionality would allow the Client to learn that the input files had 2 identifiers in common, and that the associated values summed to 40. It does this without revealing which specific identifiers were in common (Ada and Ruby in the example above), or revealing anything additional about the other identifiers in the two parties' data set.

Private Join and Compute is a variant of the well-studied Private Set Intersection functionality. We sometimes also refer to Private Join and Compute as Private Intersection-Sum.

How to run the protocol

In order to run Private Join and Compute, you need to install Bazel, if you don't have it already. Follow the instructions for your platform on the Bazel website.

You also need to install Git, if you don't have it already. Follow the instructions for your platform on the Git website.

Once you've installed Bazel and Git, open a Terminal and clone the Private Join and Compute repository into a local folder:

git clone https://github.com/google/private-join-and-compute.git

Navigate into the private-join-and-compute folder you just created, and build the Private Join and Compute library and dependencies using Bazel:

cd private-join-and-compute
bazel build //private_join_and_compute:all

(All the following instructions must be run from inside the private-join-and-compute folder.)

Next, generate some dummy data to run the protocol on:

bazel-bin/private_join_and_compute/generate_dummy_data --server_data_file=/tmp/dummy_server_data.csv \
--client_data_file=/tmp/dummy_client_data.csv

This will create dummy data for the server and client at the specified locations. You can look at the files in /tmp/dummy_server_data.csv and /tmp/dummy_client_data.csv to see the dummy data that was generated. You can also change the size of the dummy data generated using additional flags. For example:

bazel-bin/private_join_and_compute/generate_dummy_data \
--server_data_file=/tmp/dummy_server_data.csv \
--client_data_file=/tmp/dummy_client_data.csv --server_data_size=1000 \
--client_data_size=1000 --intersection_size=200 --max_associated_value=100

Once you've generated dummy data, you can start the server as follows:

bazel-bin/private_join_and_compute/server --server_data_file=/tmp/dummy_server_data.csv

The server will load data from the specified file, and wait for a connection from the client.

Once the server is running, you can start a client to connect to the server. Create a new terminal and navigate to the private-join-and-compute folder. Once there, run the following command to start the client:

bazel-bin/private_join_and_compute/client --client_data_file=/tmp/dummy_client_data.csv

The client will connect to the server and execute the steps of the protocol sequentially. At the end of the protocol, the client will output the Intersection Size (the number of identifiers in common) and the Intersection Sum (the sum of associated values). If the protocol was successful, both the server and client will shut down.

Caveats

Several caveats should be carefully considered before using Private Join and Compute.

Security Model

Our protocol has security against honest-but-curious adversaries. This means that as long as both participants follow the protocol honestly, neither will learn more than the size of the intersection and the intersection-sum. However, if a participant deviates from the protocol, it is possible they could learn more than the prescribed information. For example, they could learn the specific identifiers in the intersection. If the underlying data is sensitive, we recommend performing a careful risk analysis before using Private Join and Compute, to ensure that neither party has an incentive to deviate from the protocol. The protocol can also be supplemented with external enforcement such as code audits to ensure that no party deviates from the protocol.

Maliciously Chosen Inputs

We note that our protocol does not authenticate that parties use "real" input, nor does it prevent them from arbitrarily changing their input. We suggest careful analysis of whether any party has an incentive to lie about their inputs. This risk can also be mitigated by external enforcement such as code audits.

Leakage from the Intersection-Sum.

While the Private Join and Compute functionality is supposed to reveal only the intersection-size and intersection-sum, it is possible that the intersection-sum itself could reveal something about which identifiers were in common.

For example, if an identifier has a very unique associated integer values, then it may be easy to detect if that identifier was in the intersection simply by looking at the intersection-sum. One way this could happen is if one of the identifiers has a very large associated value compared to all other identifiers. In that case, if the intersection-sum is large, one could reasonably infer that that identifier was in the intersection. To mitigate this, we suggest scrubbing inputs to remove identifiers with "outlier" values.

Another way that the intersection-sum may leak which identifiers are in the intersection is if the intersection is too small. This could make it easier to guess which combination of identifiers could be in the intersection in order to yield a particular intersection-sum. To mitigate this, one could abort the protocol if the intersection-size is below a certain threshold, or to add noise to the output of the protocol.

(Note that these mitigations are not currently implemented in this open-source library.)

Disclaimers

This is not an officially supported Google product. The software is provided as-is without any guarantees or warranties, express or implied.

private-join-and-compute's People

Contributors

efoxepstein avatar karnseth avatar kwlyeo avatar mihaelaion-code avatar schoppmp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

private-join-and-compute's Issues

Key generation time is very long

Hi guys, i have been playing around the demo code for a while, and i realize that the key generation time varies a lot (from 15 s to 200s). Is it due to changing the default curve to NIST P-256?

bazel build //private_join_and_compute:all fails

Hi,
I'm trying to build this repo using bazel.
I use windows 10, and bazel 6.3.2

ERROR: C:/users/duki/desktop/workspace/private-join-and-compute/private_join_and_compute/crypto/BUILD:40:11: Compiling private_join_and_compute/crypto/big_num.cc failed: (Exit 2): cl.exe failed: error executing command (from target //private_join_and_compute/crypto:bn_util) C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\HostX64\x64\cl.exe /nologo /DCOMPILER_MSVC /DNOMINMAX /D_WIN32_WINNT=0x0601 /D_CRT_SECURE_NO_DEPRECATE ... (remaining 36 arguments skipped)
cl : Command line warning D9002 : ignoring unknown option '-std=c++17'
private_join_and_compute/crypto/big_num.cc(102): error C2440: 'reinterpret_cast': cannot convert from 'const _Elem *' to 'unsigned char *'
        with
        [
            _Elem=char
        ]
private_join_and_compute/crypto/big_num.cc(102): note: Conversion loses qualifiers
private_join_and_compute/crypto/big_num.cc(102): error C2660: 'BN_bn2bin': function does not take 1 arguments
external/boringssl/src/include\openssl/bn.h(257): note: see declaration of 'BN_bn2bin'
private_join_and_compute/crypto/big_num.cc(102): note: while trying to match the argument list '(bignum_st *)'
INFO: Elapsed time: 2.691s, Critical Path: 1.90s
INFO: 13 processes: 13 internal.
FAILED: Build did NOT complete successfully

Failure: Received message larger than max

MacOS Catalina, 10.15.5, bazel 3.4.1. (setup was perfectly smooth)
Created example with
bazel-bin/generate_dummy_data
--server_data_file=/tmp/dummy_server_data.csv
--client_data_file=/tmp/dummy_client_data.csv --server_data_size=10000
--client_data_size=10000 --intersection_size=800 --max_associated_value=100

Client failed, saying:
Client: Loading data...
Client: Generating keys...
Client: Starting the protocol.
Client: Waiting for response and encrypted set from the server...
Client: Received encrypted set from the server, double encrypting...
Client: Sending double encrypted server data and single-encrypted client data to the server.
Client: Waiting for encrypted intersection sum...
Client::ExecuteProtocol: failed to ReEncryptSet: 13: GrpcClientMessageSink: Failed to send message, error code: 8, error_message: Received message larger than max (6540031 vs. 4194304)

Homomorphic encryption can “understand” the encrypted’s data?

First of all congratulations for PIS project!

This is a question I have. I am not expert in this subject, so please, be kind on the answer.

I understood the Homomorphic encryption is public key encryption that allows someone to operate on encrypted data without accessing the data.

Let's suppose the word "CASA" is cryptographed, and a homomorphic encryption is done on that encrypted word.

My question is:

Homomorphic will understand the "meaning" of encrypted text? Homomorphic will know that the encrypted word is also "CASA" ?

Thank you.

How can this be extended to add more columns to sum?

Where in the code should I look to extend functionality to sum more than one column?

One value to sum:
"MbeI4RGJhnYcqk91Xap3NBhVtJ5vlxrn",610
"M9S1ih1nkN1EWDJG4V6e1a3MxkF9SESc",654
"pDrMne6gHAgdQVjlG0mihiHbf7qmbCpd",214

Two values to sum:
"MbeI4RGJhnYcqk91Xap3NBhVtJ5vlxrn",610,12
"M9S1ih1nkN1EWDJG4V6e1a3MxkF9SESc",654,41
"pDrMne6gHAgdQVjlG0mihiHbf7qmbCpd",214,321

Why does the client sort the re-encrypted set ?

In client_lib.cc

td::sort(reencrypted_set.begin(), reencrypted_set.end(),
            [](const EncryptedElement& a, const EncryptedElement& b) {
              return a.element() < b.element();
            });

What would be happen if the client dosen't do this before sending this set to the server ?

High variance in runtime

Hi. I observe a very high variance in the runtime when I compute the intersection. Is there any reason for this? The high variance does not get fixed even with tens of runs. We also ran it over multiple different servers and observed the same behavior.

name 'json' is not defined

bazel build //private_join_and_compute:all
DEBUG: Rule 'com_google_protobuf' indicated that a canonical reproducible form can be obtained by modifying arguments sha256 = "d594b561fb41bf243233d8f411c7f2b7d913e5c9c1be4ca439baf7e48384c893"
DEBUG: Repository com_google_protobuf instantiated at:
no stack (--record_rule_instantiation_callstack not enabled)
Repository rule http_archive defined at:
/home/ubuntu22/.cache/bazel/_bazel_ubuntu22/8c6f03768dccbef555c19625ba83d33a/external/bazel_tools/tools/build_defs/repo/http.bzl:336:31: in
ERROR: /home/ubuntu22/.cache/bazel/_bazel_ubuntu22/8c6f03768dccbef555c19625ba83d33a/external/rules_python/python/pip_install/pip_repository.bzl:129:29: name 'json' is not defined
ERROR: /home/ubuntu22/.cache/bazel/_bazel_ubuntu22/8c6f03768dccbef555c19625ba83d33a/external/rules_python/python/pip_install/pip_repository.bzl:131:33: name 'json' is not defined
ERROR: /home/ubuntu22/.cache/bazel/_bazel_ubuntu22/8c6f03768dccbef555c19625ba83d33a/external/rules_python/python/pip_install/pip_repository.bzl:429:12: name 'json' is not defined
ERROR: error loading package '': in /home/ubuntu22/.cache/bazel/_bazel_ubuntu22/8c6f03768dccbef555c19625ba83d33a/external/rules_python/python/pip.bzl: Extension 'python/pip_install/pip_repository.bzl' has errors
INFO: Elapsed time: 0.039s
INFO: 0 processes.

Unable to view dummy data in tmp folder

Hi, have been following README instructions, but unable to view the data for the server and client at the specified locations /tmp/dummy_server_data.csv and /tmp/dummy_client_data.csv.

Not sure what I've been doing wrong as no error messages. Your help is much appreciated as I'd like to extend this great work to my own set of data.

bazel 3.5.0-homebrew, macOS 10.14.6

Thank you

Encounter errors unless running the client using sudo

Hi,
compiled with lastes bazel 3.2

If i run the client without sudo, i will encounter the follow error:

Client: Generating keys...
Client: Starting the protocol.
Client: Waiting for response and encrypted set from the server...
Client::ExecuteProtocol: failed to StartProtocol: 13: GrpcClientMessageSink: Failed to sen          d message, error code: 14, error_message: failed to connect to all addresses

However, running with sudo solve the issue.
Do you have any idea to fix this?
Thank you!

[Question] Identifier set intersection

I am new to the concept of private computation and join but super excited about what that looks in the future and what it can mean for small businesses down the road.

Would it be possible to have a Set of values when doing the intersection?

Something like this, for example:

Dataset 1

Name Phone
Ruby 111-111-2222
Ada 333-333-3333
Alexander 444-444-4444
Mika

Dataset 2

Name Phone Associated Values
Ruby 111-111-2222 10
Mike 555-555-5555 30
Alex 444-444-4444 30

Ideally, I would like this to return 2 matches: Ruby (matches on both Name and Phone) and Alex (matches on Phone).

Thank you for any help!

C++ compilation of rule '@boringssl//:crypto' failed

Hi,
Unable to successfully build using bazel.

Linux version: Ubuntu20.04
Bazel version: 3.4.0

ERROR: /home/zhang/.cache/bazel/_bazel_zhang/83385e80baf0613ee8231b029efbeda6/external/boringssl/BUILD:151:11: C++ compilation of rule '@boringssl//:crypto' failed (Exit 1) gcc failed: error executing command /usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG -ffunction-sections ... (remaining 37 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox
external/boringssl/src/crypto/curve25519/curve25519.c:503:57: error: argument 2 of type 'const uint8_t[32]' {aka 'const unsigned char[32]'} with mismatched bound [-Werror=array-parameter=]
  503 | int x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t s[32]) {
      |                                           ~~~~~~~~~~~~~~^~~~~
In file included from external/boringssl/src/crypto/curve25519/curve25519.c:33:
external/boringssl/src/crypto/curve25519/internal.h:109:58: note: previously declared as 'const uint8_t *' {aka 'const unsigned char *'}
  109 | int x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t *s);
      |                                           ~~~~~~~~~~~~~~~^
external/boringssl/src/crypto/curve25519/curve25519.c:823:57: error: argument 2 of type 'const uint8_t *' {aka 'const unsigned char *'} declared as a pointer [-Werror=array-parameter=]
  823 | void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t *a) {
      |                                          ~~~~~~~~~~~~~~~^
In file included from external/boringssl/src/crypto/curve25519/curve25519.c:33:
external/boringssl/src/crypto/curve25519/internal.h:117:56: note: previously declared as an array 'const uint8_t[32]' {aka 'const unsigned char[32]'}
  117 | void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t a[32]);
      |                                          ~~~~~~~~~~~~~~^~~~~
cc1: all warnings being treated as errors

I have tried to build with bazel-4.0.0, then it will get:

ERROR: /home/zhang/.cache/bazel/_bazel_zhang/83385e80baf0613ee8231b029efbeda6/external/boringssl/BUILD:151:11: Compiling src/crypto/curve25519/curve25519.c failed: (Exit 1): gcc failed: error executing command /usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG -ffunction-sections ... (remaining 37 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox gcc failed: error executing command /usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG -ffunction-sections ... (remaining 37 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox
external/boringssl/src/crypto/curve25519/curve25519.c:503:57: error: argument 2 of type 'const uint8_t[32]' {aka 'const unsigned char[32]'} with mismatched bound [-Werror=array-parameter=]
  503 | int x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t s[32]) {
      |                                           ~~~~~~~~~~~~~~^~~~~
In file included from external/boringssl/src/crypto/curve25519/curve25519.c:33:
external/boringssl/src/crypto/curve25519/internal.h:109:58: note: previously declared as 'const uint8_t *' {aka 'const unsigned char *'}
  109 | int x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t *s);
      |                                           ~~~~~~~~~~~~~~~^
external/boringssl/src/crypto/curve25519/curve25519.c:823:57: error: argument 2 of type 'const uint8_t *' {aka 'const unsigned char *'} declared as a pointer [-Werror=array-parameter=]
  823 | void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t *a) {
      |                                          ~~~~~~~~~~~~~~~^
In file included from external/boringssl/src/crypto/curve25519/curve25519.c:33:
external/boringssl/src/crypto/curve25519/internal.h:117:56: note: previously declared as an array 'const uint8_t[32]' {aka 'const unsigned char[32]'}
  117 | void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t a[32]);
      |                                          ~~~~~~~~~~~~~~^~~~~
cc1: all warnings being treated as errors

Questions about runtime

Hi, I ran test with Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz and 64GB of RAM, the sizes of dataset are both 10000, and intersection size is 50. It took about 41 seconds for client to get the result, excluding the key generation time. But in the paper it said that for 10000 inputsize only cost 7.47 seconds. Is this performance gap as expected?

build fail with bazel version 0.28.1

build error with command:
bazel build :all --incompatible_disable_deprecated_attr_params=false --incompatible_depset_is_not_iterable=false --incompatible_new_actions_api=false --incompatible_no_support_tools_in_action_inputs=false

the error msg is :

ERROR: C:/users/lll/bazel_lll/ct3wwz7r/external/com_github_gflags_gflags/BUILD:16:16: Executing genrule @com_github_gflags_gflags//:gflags_google_h failed (Exit -1). Note: Remote connection/protocol failed with: execution failed
Action failed to execute: java.io.IOException: ERROR: src/main/native/windows/process.cc(184): CreateProcessW("c:\tools\msys64\usr\bin\bash.exe" -c "source external/bazel_tools/tools/genrule/genrule-setup.sh; awk '{ gsub(/@ns@/, "google"); gsub(/@ns@/, "GOOGLE"); print; }' external/com_github_gflags
(...)): 绯荤粺鎵句笉鍒版寚瀹氱殑鏂囦欢銆?

Communication Cost

How is the communication cost (in MB) from the paper Private Join and Compute from PIR with Default calculated? It does not seems like the source code contains built-in functionalities for testing communication costs.

image

Unable to build

I've tried to build using both methods in the README.

This is on mac osx High Sierra 10.13.3 running the latest version of bazel (1.1.0)

bazel build :all
and I received a bunch of errors.

I also tried the alternate build method and it also failed:
bazel build :all --incompatible_disable_deprecated_attr_params=false --incompatible_depset_is_not_iterable=false --incompatible_new_actions_api=false --incompatible_no_support_tools_in_action_inputs=false
INFO: Writing tracer profile to '/private/var/tmp/_bazel_jklein/94f892001698c23c1f7f07922b0f7cea/command.profile.gz'
ERROR: /Users/jklein/Sites/htdocs/waze/blinders/private-join-and-compute/BUILD:30:1: in srcs attribute of _generate_cc rule //:_private_join_and_compute_proto_grpc_codegen: '//:_private_join_and_compute_proto_only' does not have mandatory providers: 'proto'. Since this rule was created by the macro 'grpc_proto_library', the error might have been caused by the macro implementation
ERROR: Analysis of target '//:_private_join_and_compute_proto_grpc_codegen' failed; build aborted: Analysis of target '//:_private_join_and_compute_proto_grpc_codegen' failed; build aborted
INFO: Elapsed time: 0.315s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (0 packages loaded, 0 targets configured)

Build failed

When I run bazel build //private_join_and_compute:all with bazerl version = 6.3.2, the following issue occurs:

INFO: Repository pip_deps instantiated at:
  /home/ruidazeng/private-join-and-compute/WORKSPACE:41:10: in <toplevel>
  /home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/rules_python/python/pip.bzl:211:19: in pip_parse
Repository rule pip_repository defined at:
  /home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/rules_python/python/pip_install/pip_repository.bzl:295:33: in <toplevel>
ERROR: An error occurred during the fetch of repository 'pip_deps':
   Traceback (most recent call last):
        File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/rules_python/python/pip_install/pip_repository.bzl", line 179, column 13, in _pip_repository_impl
                fail("rules_python failed: %s (%s)" % (result.stdout, result.stderr))
Error in fail: rules_python failed:  (Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 187, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/usr/lib/python3.10/runpy.py", line 146, in _get_module_details
    return _get_module_details(pkg_main_name, error)
  File "/usr/lib/python3.10/runpy.py", line 110, in _get_module_details
    __import__(pkg_name)
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/rules_python/python/pip_install/parse_requirements_to_bzl/__init__.py", line 9, in <module>
    from pip._internal.network.session import PipSession
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/network/session.py", line 29, in <module>
    from pip._internal.metadata import get_default_environment
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/metadata/__init__.py", line 3, in <module>
    from .base import BaseDistribution, BaseEnvironment, FilesystemWheel, MemoryWheel, Wheel
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/metadata/base.py", line 27, in <module>
    from pip._internal.locations import site_packages, user_site
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/locations/__init__.py", line 14, in <module>
    from . import _distutils, _sysconfig
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/locations/_distutils.py", line 9, in <module>
    from distutils.cmd import Command as DistutilsCommand
ModuleNotFoundError: No module named 'distutils.cmd'
)
ERROR: /home/ruidazeng/private-join-and-compute/WORKSPACE:41:10: fetching pip_repository rule //external:pip_deps: Traceback (most recent call last):
        File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/rules_python/python/pip_install/pip_repository.bzl", line 179, column 13, in _pip_repository_impl
                fail("rules_python failed: %s (%s)" % (result.stdout, result.stderr))
Error in fail: rules_python failed:  (Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 187, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/usr/lib/python3.10/runpy.py", line 146, in _get_module_details
    return _get_module_details(pkg_main_name, error)
  File "/usr/lib/python3.10/runpy.py", line 110, in _get_module_details
    __import__(pkg_name)
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/rules_python/python/pip_install/parse_requirements_to_bzl/__init__.py", line 9, in <module>
    from pip._internal.network.session import PipSession
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/network/session.py", line 29, in <module>
    from pip._internal.metadata import get_default_environment
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/metadata/__init__.py", line 3, in <module>
    from .base import BaseDistribution, BaseEnvironment, FilesystemWheel, MemoryWheel, Wheel
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/metadata/base.py", line 27, in <module>
    from pip._internal.locations import site_packages, user_site
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/locations/__init__.py", line 14, in <module>
    from . import _distutils, _sysconfig
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/locations/_distutils.py", line 9, in <module>
    from distutils.cmd import Command as DistutilsCommand
ModuleNotFoundError: No module named 'distutils.cmd'
)
ERROR: Error computing the main repository mapping: no such package '@pip_deps//': rules_python failed:  (Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 187, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/usr/lib/python3.10/runpy.py", line 146, in _get_module_details
    return _get_module_details(pkg_main_name, error)
  File "/usr/lib/python3.10/runpy.py", line 110, in _get_module_details
    __import__(pkg_name)
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/rules_python/python/pip_install/parse_requirements_to_bzl/__init__.py", line 9, in <module>
    from pip._internal.network.session import PipSession
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/network/session.py", line 29, in <module>
    from pip._internal.metadata import get_default_environment
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/metadata/__init__.py", line 3, in <module>
    from .base import BaseDistribution, BaseEnvironment, FilesystemWheel, MemoryWheel, Wheel
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/metadata/base.py", line 27, in <module>
    from pip._internal.locations import site_packages, user_site
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/locations/__init__.py", line 14, in <module>
    from . import _distutils, _sysconfig
  File "/home/ruidazeng/.cache/bazel/_bazel_ruidazeng/2053e599c9a1f51135f60eacae02d6b0/external/pypi__pip/pip/_internal/locations/_distutils.py", line 9, in <module>
    from distutils.cmd import Command as DistutilsCommand
ModuleNotFoundError: No module named 'distutils.cmd'
)
Loading:

Linking of rule XXX failed (Exit 1) gcc failed

On two different Arch Linux computers I get variations of the same error:

ERROR: /home/bquast/private-join-and-compute/BUILD:66:1: Linking of rule '//:generate_dummy_data' failed (Exit 1) gcc failed: error executing command /usr/bin/gcc @bazel-out/k8-fastbuild/bin/generate_dummy_data-2.params

Is there anything I can change?

java and py

What does the java folder and the private_join_and_compute/py folder do? Are they needed to compile and build the functioning project which is mostly in C++?

run bazel build :all fails

Hi,

Unable to successfully build using bazel.

mac version: macOS Catalina 10.15.7
Bazel version: 3.7.2

➜  private-join-and-compute git:(master) bazel build :all
WARNING: Download from https://mirror.bazel.build/github.com/gflags/gflags/archive/v2.2.2.tar.gz failed: class com.google.devtools.build.lib.bazel.repository.downloader.UnrecoverableHttpException GET returned 404 Not Found
INFO: Analyzed 22 targets (51 packages loaded, 3149 targets configured).
INFO: Found 22 targets...
INFO: From Linking external/com_google_protobuf/libprotobuf_lite.a [for host]:
/Library/Developer/CommandLineTools/usr/bin/libtool: file: bazel-out/host/bin/external/com_google_protobuf/_objs/protobuf_lite/io_win32.o has no symbols
ERROR: /private/var/tmp/_bazel_gowthama/08a1a677135ff3209e105a24cb8925fe/external/boringssl/BUILD:131:11: C++ compilation of rule '@boringssl//:crypto' failed (Exit 1): cc_wrapper.sh failed: error executing command external/local_config_cc/cc_wrapper.sh -U_FORTIFY_SOURCE -fstack-protector -Wall -Wthread-safety -Wself-assign -fcolor-diagnostics -fno-omit-frame-pointer -MD -MF ... (remaining 34 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox cc_wrapper.sh failed: error executing command external/local_config_cc/cc_wrapper.sh -U_FORTIFY_SOURCE -fstack-protector -Wall -Wthread-safety -Wself-assign -fcolor-diagnostics -fno-omit-frame-pointer -MD -MF ... (remaining 34 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:67:
/usr/local/include/openssl/e_os2.h:276:11: error: 'OPENSSL_EXPORT' macro redefined [-Werror,-Wmacro-redefined]
#  define OPENSSL_EXPORT extern
          ^
external/boringssl/src/include/openssl/base.h:211:9: note: previous definition is here
#define OPENSSL_EXPORT
        ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:70:
In file included from /usr/local/include/openssl/buffer.h:62:
/usr/local/include/openssl/ossl_typ.h:152:29: error: typedef redefinition with different types ('struct ecdsa_method' vs 'struct ecdsa_method_st')
typedef struct ecdsa_method ECDSA_METHOD;
                            ^
external/boringssl/src/include/openssl/base.h:387:32: note: previous definition is here
typedef struct ecdsa_method_st ECDSA_METHOD;
                               ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:75:
In file included from /usr/local/include/openssl/bio.h:69:
In file included from /usr/local/include/openssl/crypto.h:130:
/usr/local/include/openssl/opensslv.h:33:10: error: 'OPENSSL_VERSION_NUMBER' macro redefined [-Werror,-Wmacro-redefined]
# define OPENSSL_VERSION_NUMBER  0x1000212fL
         ^
external/boringssl/src/include/openssl/base.h:176:9: note: previous definition is here
#define OPENSSL_VERSION_NUMBER 0x1010107f
        ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:75:
In file included from /usr/local/include/openssl/bio.h:69:
/usr/local/include/openssl/crypto.h:265:3: error: typedef redefinition with different types ('struct CRYPTO_dynlock' vs 'struct CRYPTO_dynlock')
} CRYPTO_dynlock;
  ^
external/boringssl/src/include/openssl/thread.h:158:3: note: previous definition is here
} CRYPTO_dynlock;
  ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:75:
In file included from /usr/local/include/openssl/bio.h:69:
/usr/local/include/openssl/crypto.h:451:3: error: typedef redefinition with different types ('struct crypto_threadid_st' vs 'int')
} CRYPTO_THREADID;
  ^
external/boringssl/src/include/openssl/base.h:318:13: note: previous definition is here
typedef int CRYPTO_THREADID;
            ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:75:
In file included from /usr/local/include/openssl/bio.h:69:
/usr/local/include/openssl/crypto.h:534:30: error: too many arguments provided to function-like macro invocation
void *CRYPTO_malloc(int num, const char *file, int line);
                             ^
/usr/local/include/openssl/crypto.h:381:10: note: macro 'OPENSSL_malloc' defined here
# define OPENSSL_malloc(num)     CRYPTO_malloc((int)num,__FILE__,__LINE__)
         ^
/usr/local/include/openssl/crypto.h:534:7: error: redefinition of 'OPENSSL_malloc' as different kind of symbol
void *CRYPTO_malloc(int num, const char *file, int line);
      ^
external/boringssl/src/include/openssl/mem.h:150:23: note: expanded from macro 'CRYPTO_malloc'
#define CRYPTO_malloc OPENSSL_malloc
                      ^
external/boringssl/src/include/openssl/mem.h:79:22: note: previous definition is here
OPENSSL_EXPORT void *OPENSSL_malloc(size_t size);
                     ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:75:
In file included from /usr/local/include/openssl/bio.h:69:
/usr/local/include/openssl/crypto.h:537:43: error: too many arguments provided to function-like macro invocation
void *CRYPTO_realloc(void *addr, int num, const char *file, int line);
                                          ^
/usr/local/include/openssl/crypto.h:383:10: note: macro 'OPENSSL_realloc' defined here
# define OPENSSL_realloc(addr,num) \
         ^
/usr/local/include/openssl/crypto.h:537:7: error: redefinition of 'OPENSSL_realloc' as different kind of symbol
void *CRYPTO_realloc(void *addr, int num, const char *file, int line);
      ^
external/boringssl/src/include/openssl/mem.h:151:24: note: expanded from macro 'CRYPTO_realloc'
#define CRYPTO_realloc OPENSSL_realloc
                       ^
external/boringssl/src/include/openssl/mem.h:88:22: note: previous definition is here
OPENSSL_EXPORT void *OPENSSL_realloc(void *ptr, size_t new_size);
                     ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:75:
In file included from /usr/local/include/openssl/bio.h:69:
/usr/local/include/openssl/crypto.h:631:5: error: conflicting types for 'CRYPTO_memcmp'
int CRYPTO_memcmp(const volatile void *a, const volatile void *b, size_t len);
    ^
external/boringssl/src/include/openssl/mem.h:99:20: note: previous declaration is here
OPENSSL_EXPORT int CRYPTO_memcmp(const void *a, const void *b, size_t len);
                   ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:94:
In file included from /usr/local/include/openssl/objects.h:65:
/usr/local/include/openssl/obj_mac.h:94:9: error: 'OBJ_member_body' macro redefined [-Werror,-Wmacro-redefined]
#define OBJ_member_body         OBJ_iso,2L
        ^
external/boringssl/src/include/openssl/nid.h:913:9: note: previous definition is here
#define OBJ_member_body 1L, 2L
        ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:94:
In file included from /usr/local/include/openssl/objects.h:65:
/usr/local/include/openssl/obj_mac.h:98:9: error: 'OBJ_identified_organization' macro redefined [-Werror,-Wmacro-redefined]
#define OBJ_identified_organization             OBJ_iso,3L
        ^
external/boringssl/src/include/openssl/nid.h:3013:9: note: previous definition is here
#define OBJ_identified_organization 1L, 3L
        ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:94:
In file included from /usr/local/include/openssl/objects.h:65:
/usr/local/include/openssl/obj_mac.h:103:9: error: 'OBJ_hmac_md5' macro redefined [-Werror,-Wmacro-redefined]
#define OBJ_hmac_md5            OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L
        ^
external/boringssl/src/include/openssl/nid.h:3441:9: note: previous definition is here
#define OBJ_hmac_md5 1L, 3L, 6L, 1L, 5L, 5L, 8L, 1L, 1L
        ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:94:
In file included from /usr/local/include/openssl/objects.h:65:
/usr/local/include/openssl/obj_mac.h:108:9: error: 'OBJ_hmac_sha1' macro redefined [-Werror,-Wmacro-redefined]
#define OBJ_hmac_sha1           OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L
        ^
external/boringssl/src/include/openssl/nid.h:3446:9: note: previous definition is here
#define OBJ_hmac_sha1 1L, 3L, 6L, 1L, 5L, 5L, 8L, 1L, 2L
        ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:94:
In file included from /usr/local/include/openssl/objects.h:65:
/usr/local/include/openssl/obj_mac.h:112:9: error: 'OBJ_certicom_arc' macro redefined [-Werror,-Wmacro-redefined]
#define OBJ_certicom_arc                OBJ_identified_organization,132L
        ^
external/boringssl/src/include/openssl/nid.h:3017:9: note: previous definition is here
#define OBJ_certicom_arc 1L, 3L, 132L
        ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:94:
In file included from /usr/local/include/openssl/objects.h:65:
/usr/local/include/openssl/obj_mac.h:117:9: error: 'OBJ_international_organizations' macro redefined [-Werror,-Wmacro-redefined]
#define OBJ_international_organizations         OBJ_joint_iso_itu_t,23L
        ^
external/boringssl/src/include/openssl/nid.h:2881:9: note: previous definition is here
#define OBJ_international_organizations 2L, 23L
        ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:94:
In file included from /usr/local/include/openssl/objects.h:65:
/usr/local/include/openssl/obj_mac.h:121:9: error: 'OBJ_wap' macro redefined [-Werror,-Wmacro-redefined]
#define OBJ_wap         OBJ_international_organizations,43L
        ^
external/boringssl/src/include/openssl/nid.h:3021:9: note: previous definition is here
#define OBJ_wap 2L, 23L, 43L
        ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:94:
In file included from /usr/local/include/openssl/objects.h:65:
/usr/local/include/openssl/obj_mac.h:125:9: error: 'OBJ_wap_wsg' macro redefined [-Werror,-Wmacro-redefined]
#define OBJ_wap_wsg             OBJ_wap,1L
        ^
external/boringssl/src/include/openssl/nid.h:3025:9: note: previous definition is here
#define OBJ_wap_wsg 2L, 23L, 43L, 1L
        ^
In file included from external/boringssl/src/crypto/x509v3/pcy_cache.c:60:
In file included from /usr/local/include/openssl/x509.h:73:
In file included from /usr/local/include/openssl/evp.h:94:
In file included from /usr/local/include/openssl/objects.h:65:
/usr/local/include/openssl/obj_mac.h:130:9: error: 'OBJ_selected_attribute_types' macro redefined [-Werror,-Wmacro-redefined]
#define OBJ_selected_attribute_types            OBJ_joint_iso_itu_t,5L,1L,5L
        ^
external/boringssl/src/include/openssl/nid.h:1828:9: note: previous definition is here
#define OBJ_selected_attribute_types 2L, 5L, 1L, 5L
        ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
INFO: Elapsed time: 80.534s, Critical Path: 15.75s
INFO: 394 processes: 212 internal, 182 darwin-sandbox.
FAILED: Build did NOT complete successfully

.pb.h header file not found

First of all, thank you for your work. I have successfully compiled and ran this program.

Now I am analyzing the code of this project, I found in private_join_and_compute/util/elgamal_key_util.h that header file "private_join_and_compute/crypto/elgamal.pb.h" not found. Can someone explain to me why

Failed to build

Bazel Build label: 4.2.1
error:

INFO: From Compiling src/core/ext/xds/xds_transport_grpc.cc:
In file included from external/com_github_grpc_grpc/src/core/lib/transport/transport.h:56,
                 from external/com_github_grpc_grpc/src/core/ext/filters/client_channel/subchannel.h:63,
                 from external/com_github_grpc_grpc/src/core/ext/filters/client_channel/client_channel_factory.h:24,
                 from external/com_github_grpc_grpc/src/core/ext/filters/client_channel/client_channel.h:40,
                 from external/com_github_grpc_grpc/src/core/ext/xds/xds_transport_grpc.cc:37:
external/com_github_grpc_grpc/src/core/lib/promise/pipe.h: In instantiation of 'class grpc_core::pipe_detail::Center<std::unique_ptr<grpc_core::Message, grpc_core::Arena::PooledDeleter> >':
external/com_github_grpc_grpc/src/core/lib/promise/pipe.h:489:74:   required from 'grpc_core::Pipe<T>::Pipe(grpc_core::Arena*) [with T = std::unique_ptr<grpc_core::Message, grpc_core::Arena::PooledDeleter>]'
external/com_github_grpc_grpc/src/core/lib/channel/promise_based_filter.h:280:43:   required from here
external/com_github_grpc_grpc/src/core/lib/promise/pipe.h:271:14: warning: 'grpc_core::pipe_detail::Center<std::unique_ptr<grpc_core::Message, grpc_core::Arena::PooledDeleter> >::value_state_' is too small to hold all values of 'enum class grpc_core::pipe_detail::Center<std::unique_ptr<grpc_core::Message, grpc_core::Arena::PooledDeleter> >::ValueState'
  271 |   ValueState value_state_ : 2;
      |              ^~~~~~~~~~~~
ERROR: /root/.cache/bazel/_bazel_root/262c3d74d051dbcac0d1fa538765b135/external/com_github_grpc_grpc/src/core/BUILD:3386:16: Compiling src/core/ext/xds/xds_listener.cc failed: (Exit 1): gcc failed: error executing command /opt/rh/devtoolset-9/root/usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG ... (remaining 97 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox
In file included from /opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/move.h:55,
                 from /opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_pair.h:59,
                 from /opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/utility:70,
                 from /opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/algorithm:60,
                 from external/com_github_grpc_grpc/src/core/ext/xds/xds_listener.h:25,
                 from external/com_github_grpc_grpc/src/core/ext/xds/xds_listener.cc:19:
/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/type_traits: In instantiation of 'struct std::is_constructible<grpc_core::XdsListenerResource::FilterChainData>':
/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/type_traits:2883:25:   required from 'constexpr const bool std::is_constructible_v<grpc_core::XdsListenerResource::FilterChainData>'
/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/optional:479:66:   required by substitution of 'template<class ... _Args, typename std::enable_if<is_constructible_v<grpc_core::XdsListenerResource::FilterChainData, _Args&& ...>, bool>::type <anonymous> > constexpr std::_Optional_base<grpc_core::XdsListenerResource::FilterChainData, false, false>::_Optional_base(std::in_place_t, _Args&& ...) [with _Args = {}; typename std::enable_if<is_constructible_v<grpc_core::XdsListenerResource::FilterChainData, _Args&& ...>, bool>::type <anonymous> = <missing>]'
/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/type_traits:883:12:   required from 'struct std::is_constructible<grpc_core::XdsListenerResource::TcpListener, const grpc_core::XdsListenerResource::TcpListener&>'
/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/type_traits:901:12:   required from 'struct std::__is_copy_constructible_impl<grpc_core::XdsListenerResource::TcpListener, true>'
/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/type_traits:907:12:   required from 'struct std::is_copy_constructible<grpc_core::XdsListenerResource::TcpListener>'
/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/type_traits:2889:25:   required from 'constexpr const bool std::is_copy_constructible_v<grpc_core::XdsListenerResource::TcpListener>'
/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/variant:275:5:   required from 'constexpr const bool std::__detail::__variant::_Traits<grpc_core::XdsListenerResource::HttpConnectionManager, grpc_core::XdsListenerResource::TcpListener>::_S_copy_ctor'
/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/variant:1219:11:   required from 'class std::variant<grpc_core::XdsListenerResource::HttpConnectionManager, grpc_core::XdsListenerResource::TcpListener>'
external/com_github_grpc_grpc/src/core/ext/xds/xds_listener.h:189:53:   required from here
/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/type_traits:883:12: error: default member initializer for 'grpc_core::XdsListenerResource::DownstreamTlsContext::require_client_certificate' required before the end of its enclosing class
  883 |     struct is_constructible
      |            ^~~~~~~~~~~~~~~~
In file included from external/com_github_grpc_grpc/src/core/ext/xds/xds_listener.cc:19:
external/com_github_grpc_grpc/src/core/ext/xds/xds_listener.h:83:37: note: defined here
   83 |     bool require_client_certificate = false;
      |                                     ^~~~~~~~
external/com_github_grpc_grpc/src/core/ext/xds/xds_listener.cc: In function 'grpc_core::XdsListenerResource::DownstreamTlsContext grpc_core::{anonymous}::DownstreamTlsContextParse(const grpc_core::XdsResourceType::DecodeContext&, const envoy_config_core_v3_TransportSocket*, grpc_core::ValidationErrors*)':
external/com_github_grpc_grpc/src/core/ext/xds/xds_listener.cc:530:39: error: could not convert '<brace-enclosed initializer list>()' from '<brace-enclosed initializer list>' to 'grpc_core::XdsListenerResource::DownstreamTlsContext'
  530 |   if (!extension.has_value()) return {};
      |                                       ^
      |                                       |
      |                                       <brace-enclosed initializer list>
external/com_github_grpc_grpc/src/core/ext/xds/xds_listener.cc:535:13: error: could not convert '<brace-enclosed initializer list>()' from '<brace-enclosed initializer list>' to 'grpc_core::XdsListenerResource::DownstreamTlsContext'
  535 |     return {};
      |             ^
      |             |
      |             <brace-enclosed initializer list>
external/com_github_grpc_grpc/src/core/ext/xds/xds_listener.cc:541:13: error: could not convert '<brace-enclosed initializer list>()' from '<brace-enclosed initializer list>' to 'grpc_core::XdsListenerResource::DownstreamTlsContext'
  541 |     return {};
      |             ^
      |             |
      |             <brace-enclosed initializer list>
external/com_github_grpc_grpc/src/core/ext/xds/xds_listener.cc:549:13: error: could not convert '<brace-enclosed initializer list>()' from '<brace-enclosed initializer list>' to 'grpc_core::XdsListenerResource::DownstreamTlsContext'
  549 |     return {};
      |             ^
      |             |
      |             <brace-enclosed initializer list>
INFO: Elapsed time: 238.280s, Critical Path: 22.61s
INFO: 1553 processes: 46 internal, 1507 processwrapper-sandbox.
FAILED: Build did NOT complete successfully

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.