Private (Information) Retrieval

October 19, 2021 ยท View on GitHub

Problem Statement

Private information retrieval (PIR) enables retrieving an element from a server-held database without revealing the desired index.

Dependencies

This library requires the following external dependencies:

  • Abseil for C++ common libraries.

  • Bazel for building the library.

  • BoringSSL for underlying cryptographic operations.

  • GFlag for flags. Needed to use glog.

  • GLog for logging.

  • Google Test for unit testing the library.

  • Protocol Buffers for data serialization.

  • Shell for fully homomorphic encryption.

  • Tink for cryptographic PRNGs.

How to Build

In order to run the SHELL library, 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 SHELL repository into a local folder:

git clone https://github.com/google/private-retrieval.git

Navigate into the private-retrieval folder you just created, and build the SHELL library and dependencies using Bazel. Note, the library must be built using C++17.

cd private-retrieval
bazel build :all --cxxopt='-std=c++17'

You may also run all tests (recursively) using the following command:

bazel test ... --cxxopt='-std=c++17'

Disclaimers

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