An implementation of the GGH15 Graded encoding scheme, and its use for obfuscating read-once branching programs (BPs). A description of many aspect of this implementation can be found here.
To be able to handle anything more than just toy problems, we developed a host of algorithmic and code-level optimizations. These include new variants of discrete Gaussian sampler and lattice trapdoor sampler, efficient matrix-manipulation routines, and many tradeoffs. Some of these optimizations can likely find other uses in lattice-based cryptography.
This implementation is written in C++ and uses the NTL mathematical library (version 10.4.0 or higher). It is distributed under the terms of the Apache License v2.0.
The top-level directory constains most of the implementations code,
and a Makefile to compile it. After cloning the repository, just run
make depend
and then make
in the top-level directory.
The utils
subdirectory contains some utility functions (many of
which were lifted from HElib or NTL). The programs
subdirectory contains the obfuscation programs and some unit-test
programs. To build these programs, run make <progName>_x
in the
top-level directory (e.g., make initialize_x
to make the
initialization program).
This implementation was written by Shai Halevi from IBM, Tzipora Halevi from Brooklyn College, and Victor Shoup and Noah Stephens-Davidowitz from NYU. It was Supported by the Defense Advanced Research Projects Agency (DARPA) and Army Research Office(ARO) under Contract No. W911NF-15-C-0236.