WizToolKit

This is a collection of tools, provided by team Wizkit, for working with the SIEVE IR. It In addition to a few command-line tools, it has an extensive C++ API for manipulating the SIEVE IR. This release of WizToolKit corresponds to version 1.0.0 of the SIEVE IR Specification.

If you’re not familiar with the SIEVE IR, have a look at our introduction to the SIEVE IR. It represents ZK relations using circuits, and the instance and short-witness as input streams.

Command-line

The following tools are available on the command-line from WizToolKit.

wtk-firealarm (checking and evaluating)

Checks an individual IR resource for well-formedness. For a triple of relation, instance, and short-witness it checks for evaluation validity.

wtk-press (format and feature conversions)

Converts between the text and binary formats of the IR. It can also replace IR @switch directives with a multiplexer implementation using @loops and a @function.

wtk-viz (visualization)

Visualize the IR by converting it to Graphviz.

wtk-bolt (example and testing)

Invokes the BOLT or PLASMASnooze interpreters without ZK. For use in testing or as an example. See WizToolKit for Backends for more information on these.

For more information on these tools see WizToolKit on the command-line.

Parsing the IR

WizToolKit enables parsing both text and binary profiles of the SIEVE IR. The parsing API is designed for maximal flexibility, parsing the header first and then allowing the user to decide how to proceed.

In addition to both IR-Formats, WizToolKit can parse a resource with either a streaming parser (when grammar is limited to IR-Simple) or a syntax-tree parser. It also allows the user to supply a numeric type for parsing field-element literals via a template parameter, and after parsing the header to possibly downgrade to uint64_t or uint32_t for the remaining IR body.

Parser Format Comment

ANTLR

Text

Uses the ANTLR generator. "Obviously" correct, parses line-numbers, slow

IRRegular

Text

Fast, minimal memory use, no line-numbers

FlatBuffer

Binary

FlatBuffer parser

For more information see Parsing the IR.

For ZK Backends

For ZK Backends, WizToolKit provides a simple Backend API, and two interpreters to drive the API.

BOLT

first builds an augmented representation of the relation while checking for well-formedness. Then it evaluates without needing any well-formedness checks or having to stop and translate indices to actual wires. This is ideal for relations which make heavy use of loops.

PLASMASnooze

(A pun on FIREALARM) simply traverses the IR syntax-tree doing on-the-fly well-formedness checks.

For more information see WizToolKit for ZK Backends.

Other APIs

The entirety of the WizToolKit command-line is available as API, however not all of it is well documented.

Building

WizToolKit uses CMake, Python3, Java (optional), and a number of other utilities during build, of course in addition to a C++ compiler. This all is orchestrated using make, and the familiar pattern should work. Build artifacts are typically deposited in the target/ directoy.

make
make install

See the Install Guide for details, and for a list of necessary dependencies.

Licensing

The source code and other substantial material in this directory is Copyright © 2020-2022 Stealth Software Technologies, Inc.

This version of WizToolKit has been approved for public release under the open-source MIT License.

Distribution Statement A: Approved for Public Release, Distribution Unlimited.

This material is based upon work supported by DARPA under Contract No. HR001120C0087. Any opinions, findings and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of DARPA.