An implementation of multi-party set reconciliation using Inverible Bloom Lookup Tables. Handles an arbitrary number of parties (with optimizations for the two-party case), and multiple key formats (either primitives or std::string
s of arbitrary length), both through template parameters.
To test the multi-party IBLTS:
$ make
$ ./bin/multi_testing
Upper bounding the set difference is an important problem in set reconciliation. We implement the Strata Estimator designed here.
IBLTs and Strata Estimators are used as sub-component of our file synchronization protocol, which shares many similarities to the one explained in this paper.
To test the file synchronization protocol:
$ ./bin/file_sync_testing [file1] [file2]
Requirements:
-
Google's Protocol Buffer, which we use for (de)serialization of messages
-
zlib, which we use for compression
-
openssl which we use for SHA-1 hash.
$ sudo apt-get install libssl-dev
$ sudo apt-get instal libboost-all-dev
This repo also contains implementations of basic tabluation hashing, "field" arithmetic, and document fingerprinting using winnowing.
Each can be tested separately (refer to Makefile
for appropriate commands).