This is the implementation of our paper: **Scalable Private Set Union from Symmetric-Key Techniques **[ePrint].
Evaluating on a single server (2 36-cores Intel Xeon CPU E5-2699 v3 @ 2.30GHz and 256GB of RAM) with a single thread per party, each party has 2^20 items, our protocol requires 239 seconds and 144 MB.
$ git clone https://github.com/osu-crypto/PSU.git
$ cd PSU
$ bash buildAll.get
If you have any problem, see below.
C++ compiler with C++14 support. There are several library dependencies including Boost, Miracl, NTL with GMP, and libOTe. For libOTe, it requires CPU supporting PCLMUL, AES-NI, and SSE4.1. Optional: nasm for improved SHA1 performance. Our code has been tested on both Windows (Microsoft Visual Studio) and Linux. To install the required libraries:
- For building boost, miracl and libOTe, please follow the more instructions at
libOTe - For NTL with GMP,
cd ./thirdparty, and runbash all.get.
- build cryptoTools, libOTe, and libPSU projects in order.
- run frontend project
- make (requirements:
CMake,Make,g++or similar) - for test: ./bin/frontend.exe -u
The database is generated randomly.
-u unit test which computes PSU, each with set size 2^12 in the semi-honest setting
-n log(set size)
-t number of threads
./bin/frontend.exe -r1 -n 12 -t 1
& ./bin/frontend.exe -r0 -n 12 -t 1
For any questions on building or running the library, please contact Ni Trieu at trieun at oregonstate dot edu