Private Set Intersection protocol based on ECDH, Bloom Filters, and Golomb Compressed Sets.
There are requirements for the entire project which each language shares. There also could be requirements for each target language:
These are the common requirements across all target languages of this project.
- A compiler such as clang, gcc, or msvc
- Bazel
The repository uses a folder structure to isolate the supported targets from one another:
private_set_intersection/<target language>/<sources>
See the C++ README.md
See the JavaScript README.md
See the Go README.md
See the Python README.md
See the Rust README.md
To use this library in another Bazel project, add the following in your WORKSPACE file:
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
git_repository(
name = "org_openmined_psi",
remote = "https://github.com/OpenMined/PSI",
branch = "master",
init_submodules = True,
)
load("@org_openmined_psi//private_set_intersection:preload.bzl", "psi_preload")
psi_preload()
load("@org_openmined_psi//private_set_intersection:deps.bzl", "psi_deps")
psi_deps()
A full description of the protocol can be found in the documentation of the PsiClient class. The corresponding server class is PsiServer. An example of how to interleave the different phases of the protocol can be found in psi_server_test.cpp.
See CHANGES.md.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
See CONTRIBUTORS.md.