Home

Awesome

SplitCommit

A portable C++14 implementation of the recent UC-secure additively homomorphic commitment scheme of [1]. The codebase builds heavily on the libOTe library for efficient oblivious transfer extension.

The library is written with efficiency in mind, while being flexible enough for various applications. Currently two message-sizes are supported, bit commitments and 128-bit commitments. More might be added in the future, but if you want/need to add this functionality let me know!

Performance

On a single Intel Xeon server (2 36-cores Intel Xeon CPU E5-2699 v3 @ 2.30GHz and 256GB of RAM), utilizing a single thread per party, the implementation can perform n=2<sup>24</sup> commitment in 11 seconds (0.65 microseconds/per), decommit in 5.4 seconds (0.32 microseconds/per), and batch-decommit in 4.6 seconds (0.27 microseconds/per).

Installation

The code has been tested to work on MacOS (10.12.1), Windows 10, and Ubuntu 16.04.

Requirements

Linux/macOS

To clone, build and test the code:

If all tests succeed you are good to go.

Windows

In powershell, clone, build and test the code:

Note:

Run the test-split-commit project to perform the unit tests.

Running the main files

Two main files are produced during compilation, build/release/SplitCommitSender and build/release/SplitCommitReceiver. An example run of the two clients on different machines could be

The above code prints the time it takes to respectively perform OTs, commit, decommit and batch decommit for 10,000 random values. The -e parameters specifies how many parallel executions to run. No matter the number of parallel executions, the code only runs num_cpus executions concurrently.

White Paper

We provide the following white paper including tutorial, brief description of the commitment scheme, insights on implementation details and more.

Acknowledgements

References