This code accompanies our paper "Express: Lowering the Cost of Metadata-hiding Communication with Cryptographic Privacy" (https://arxiv.org/pdf/1911.09215.pdf)
client [serverAip:4443] [serverBip:4442] [numThreads] [rowDataSize] (optional)throughput serverA [serverBip:4442] [numThreads] [numCores (set it to 0)] [numRows] [rowDataSize] serverB [numThreads] [numCores (set it to 0)] [numRows] [rowDataSize]
The port numbers shown above are required by the implementation, but this should be easy to change if you want to run the system on another port.
numThreadstells the system how many worker goroutines to create. We set this to 1x or 2x the number of cores on the system for our evaluation.
numCoresis not used but must be set to 0 or it will hurt performance.
NumRowstells the servers how many dummy rows to put in the database after one initial row is set up by the client. So to evaluate on 1,000 rows, this value would be set to 999.
rowDataSizesets the size of rows, in bytes
By default, the client runs a write followed by a read several times in a row and reports the average as well as the client computation time for each write (the first write/read are slowed down by the setup process and omitted from the average). To measure throughput instead, add the word
throughputas an additional argument to
client. This will cause the client to send
numThreadsrequests in parallel as fast as it can (set
numThreadslarger than the actual number of cores on the machine).
serverAwill report the total elapsed time and total number of writes processed every 10 seconds after setup.
The data from our experiments can be found in the
data/ folder. Feel free to get in touch for help in running the system or using it in your own evaluations.
The dpf implementation is partially based on weikengchen/libdpf.
DO NOT USE THIS SOFTWARE TO SECURE ANY SORT OF REAL-WORLD COMMUNICATIONS!
This software is for performance testing ONLY! It is full of security vulnerabilities that could be exploited in any real-world deployment.
The purpose of this software is to evaluate the performance of the system, NOT to be used in a deployment scenario.