
Implementation of the Google Zero-Knowledge library for Identity Protocols.
The Longfellow library enables the construction of zero-knowledge protocols concerning legacy identity verification standards such as the ISO MDOC standard, the JWT standard, and W3 Verifiable Credentials. This implementation is described in:
It is named after the bridge outside the Google Cambridge office.
This project has completed several independent security reviews by panels of academic and industry experts in the field. Their reports are available in the Project documentation/Reviews page.
This repository contains the working files for a specification of Longfellow and its components. If you are interested in contributing, please create an Issue or a Pull Request. Our discussions occur under Issues.
You can test our library by using the associated devcontainer to create its environment. Select Code → Codespaces → Create codespace on main to get started. This creates a container on GitHub that includes the dependencies and provides a browser-based VS Code interface. You can compile and run our benchmarks there, though the VM may be slower than the reported measurements.
This package depends on cmake, openssl, zstd, clang, googletest and googlebenchmark.
$ sudo apt install -y build-essential clang cmake libssl-dev libzstd-dev libgtest-dev libbenchmark-dev zlib1g-dev
$ yum install -y clang libzstd-devel openssl-devel git cmake google-benchmark-devel gtest-devel
Newer versions of fedora seem to require libpfm-devel:
$ yum install -y clang libzstd-devel openssl-devel git cmake google-benchmark-devel gtest-devel libpfm-devel
Ensure that Xcode command line tools such as clang and cmake are installed.
$ brew install googletest google-benchmark zstd
First run the cmake initialization step
$ CXX=clang++ cmake -D CMAKE_BUILD_TYPE=Release -S lib -B clang-build-release --install-prefix ${PWD}/install
Next:
$ cd clang-build-release && make -j 16 && ctest -j 16
We have defined several unit, sumcheck, and zk benchmarks. Here are some of them:
$ ./algebra/fft_test --benchmark_filter='BM_*'
$ ./circuits/sha/flatsha256_circuit_test --benchmark_filter=BM_ShaZK_fp2_128