International Association for Cryptologic Research

International Association
for Cryptologic Research

Transactions on Cryptographic Hardware and Embedded Systems 2026

Trustless Delegation of Vector Commitment Construction in Resource-Constrained Settings


README

Cover (Generated by Bing Image creator, Powered by DALL-E 3)

Installation

I-Dependencies

Tip

in rare cases (miss-configured Linux distros), if you got an error stating that version "v16.20.0" was not found; following command might help: export NVM_NODEJS_ORG_MIRROR=http://nodejs.org/dist

II-Minimum Hardware Requirements

Any Linux-based system with a 8GB+ RAM and relatively generous SWAP size (at least 16GB) could be in theory capable of running these benchmarks. However, we suggest a midrange laptop with relatively recent CPU for better results.

Note

Software Requirements:

We have successfully executed benchmarks on multiple systems and expect there should be minimal sensitivity regarding spesific versions in the dependencies, however, we report one of our recent configs for the record:

  • Ubuntu @ 22.04
  • Circom @ 2.2.1
  • snarkjs @ 0.7.5
  • rustc @ 1.86.0-nightly

III-Building & Installing ProvenView

Once you have installed dependencies, you can proceed with setting up and running provenview. To obtain the latest version of provenview, head to directory of your choice and install provenview using the following command:

Building Circuits

go to the circuits directory:

cd ../circuits

build node modules:

npm install

build ZK circuits using the provided script in this directory:

./build_circuits.sh

Benchmarks

We've built the tools necessary for benchmarking using the samples provided in the samples directory. To do this, simply Go to the main directory of provenview repo and run the provided script:

./benchmark.sh 

This script reproduces the benchmarks for proving the construction of full VC in ZK (Table 6) with expected times and detailed report breakdowns.

How to Use (Detailed)

You can try to use the system with any video file that you have.

cd ../python
virtualenv .venv
source .venv/bin/activate
pip install -r requirements.txt

execute commit phase:

python commit_phase.py

execute prove phase:

python prove_phase_full.py

Then, you can use the generated files (in the python/output/ directory) as the input for the actual proof:

provenview --function <FUNCTION>
--resolution <RESOLUTION> --input <FILE>
--circuit <R1CS FILE> --output <FILE>
--witnessgenerator <BINARY/WASM FILE>

which will be like this:

provenview --circuit ../circuits/merkle_fold_step.r1cs --function vector_commitment --input output/ --output folding-proof-file.json --witnessgenerator ../circuits/merkle_fold_step_cpp/merkle_fold_step

Use the built-in provenview --help command for detailes on flag/params. The expected output is as follows:

USAGE:
    provenview [OPTIONS] --circuit <R1CS FILE> --function <FUNCTION> --input <FILE> --output <FILE> --witnessgenerator <BINARY/WASM FILE>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
    -c, --circuit <R1CS FILE>                    The R1CS file of the compiled Circom circuit.
    -f, --function <FUNCTION>                    The transformation function. [possible values: trim, vector_commitment]
    -i, --input <FILE>
      The JSON file containing the original and the transformed video data to verify.

    -o, --output <FILE>                          This file will contain the final Proof to be verified by others.
    -s, --synthetic <FOLDS>                      input value for folds (synthetic benchmarks). [default: 0]
    -w, --witnessgenerator <BINARY/WASM FILE>    Witness generator file of the circuit.