C++ library implementing several OPRF protocols and using them for Private Set Intersection
- JAVA JNI libaries
- C++ compiler supporting C++14
git submodule update --init # pull GSL and RELIC
mkdir build && cd build
cmake ..
make -j
In the droidCrypto/tests
directory, some basic tests and example programs can be found.
e.g., droidCrypto/tests/test_psi_oprf_lowmc
runs the Garbled-Circuit based PSI protocol based on LowMC
In terminal 1:
droidCrypto/tests/test_psi_oprf_lowmc 0 20
In terminal 2:
droidCrypto/tests/test_psi_oprf_lowmc 1 10
This performs a set intersection using 2^{20} elements on the server (0) side and 2^{10} elements on the client (1) side. Only the item with index 0 is common for both sets, so the client program should only print "Intersection C0" (errors may occur based on the parameters of the cuckoo filter, but the default parameters should have an error probablity of 2^{-30}).
This code is provided as a experimental implementation for testing purposes and should not be used in a productive environment. We cannot guarantee security and correctness.
We provide a small benchmarking application for modern Android phones at mobile_psi_android.
This project uses several other projects as building blocks.
- The OT code is based on the public domain library libOTe by Peter Rindal.
- Elliptic Curve operations are implemented using RELIC.
- Some of the binary circuits are based on ones from ABY.
- The garbled circuit interface is inspired by FlexSC.
- The used cuckoo filter implementation is cuckoofilter.
- The implementation of LowMC is based on Picnic.
- Mobile Private Contact Discovery at Scale by Daniel Kales (TU Graz), Christian Rechberger (TU Graz), Thomas Schneider (TU Darmstadt), Matthias Senker (TU Darmstadt), and Christian Weinert (TU Darmstadt) in 28. USENIX Security Symposium (USENIX Security'19). Paper available on ePrint.