We’re excited to open-source CryptoUtilities.jl, a collection of Julia packages built to prototype and benchmark succinct proof systems over binary fields, along with a simple walkthrough for how to use this library.

CryptoUtilities.jl includes three Julia packages that provide building blocks for the following constructions:

  • Hardware accelerated operations over binary fields (BinaryFields.jl)
  • Merkle trees and batched openings (BatchedMerkleTree.jl)
  • Reed–Solomon codes over binary fields (BinaryReedSolomon.jl)

We’ve been experimenting with the idea that many efficient SNARK constructions in the coming years will be built over binary fields. Modern hardware is already optimized for binary operations and we suspect this efficiency gap is likely to grow as hardware continues to evolve.

Exploring new cryptographic ideas requires frequent experimentation with complex mathematical structures. SageMath and similar tools are great for the math part of the exploration, but speed and real-world deployability remain critical concerns in cryptographic work. We hope to demonstrate that Julia is a perfect language fit for the former concern. Powerful tools for benchmarking and support for low-level code inspection, along with very powerful type inference and relatively simple syntax make Julia a very suitable language for performance optimization and rapid prototyping. Therefore, with CryptoUtilities.jl, we aim to show it’s possible to build and maintain a set of tools for testing and benchmarking new SNARK constructions—ideally with minimal code, clean abstractions, and good performance.

The CryptoUtilities.jl library (containing the above three packages) is published on GitHub. We’re hoping to explore more ideas around this set of tools –  especially around working with multilinear polynomials, sumcheck based protocols, and constructions such as ZODA. In this repository, you can find a short introduction to Julia, using Pluto.jl notebooks, along with detailed walkthrough tutorials for each of the published packages. The notebooks end with a simple but representative application that makes use of all three packages: building a Ligero prover and verifier.


For questions, comments and ideas, we’d love to hear from you – reach out to anovakovic@baincapital.com or @AndrijaNvk on Telegram.