TCN protocol based on Private Set Intersection Cardinality.
- The server receives a list of TCN reports and expands their Temporary Contact Numbers.
- The server loads the encoded elements in the PSI server.
- The client encodes a list of TCNs and loads them in the PSI client logic.
- The client and server follow the PSI protocol, and the client receives the intersection size.
See the full TCN protocol description here.
See the full PSI description here.
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:
tcn_psi/<target language>/<sources>
See the Go 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_tcn_psi",
remote = "https://github.com/OpenMined/TCN-PSI",
branch = "master",
init_submodules = True,
)
load("@org_openmined_psi//tcn_psi:preload.bzl", "tcn_psi_preload")
tcn_psi_preload()
load("@org_openmined_psi//tcn_psi:deps.bzl", "tcn_psi_deps")
tcn_psi_deps()
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.