| Crates.io | witnesscalc-adapter |
| lib.rs | witnesscalc-adapter |
| version | 0.1.6 |
| created_at | 2025-02-03 13:25:19.010592+00 |
| updated_at | 2025-08-25 14:35:16.831897+00 |
| description | Library to run witnesscalc in rust |
| homepage | https://zkmopro.org/ |
| repository | https://github.com/zkmopro/witnesscalc_adapter |
| max_upload_size | |
| id | 1540589 |
| size | 26,879 |
This project provides a Rust adapter for compiling and linking Circom circuit witness generator C++ sources into a native library for target platforms (e.g., mobile devices). It includes macros and functions to facilitate the integration of witness generation into Rust codebases.
[!INFO]
This project supports Circom v2.2.0 and above. For details on witness calculation, please see the witnesscalc-v2.2.0 branch.
sudo apt install build-essential cmake m4 nasm libstdc++6
brew install nasm
Include the crate in your Cargo.toml:
[dependencies]
witnesscalc-adapter = "0.1"
[build-dependencies]
witnesscalc-adapter = "0.1"
In build.rs, add the following code to compile the witness generator C++ sources (<circuit name>.cpp and <circuit name>.dat) into a native library and link to it:
witnesscalc_adapter::build_and_link("../path to directory containing your C++ sources");
// e.g. witnesscalc_adapter::build_and_link("../testdata");
// The directory should contain the following files:
// - <circuit name>.cpp
// - <circuit name>.dat
In your main code, use the witness macro to generate a witness for a given input:
witnesscalc_adapter::witness!(<circuit name>);
// e.g. witnesscalc_adapter::witness!(multiplier2);
Calculate the witness by using the <circuit name>_witness function.
let wtns = <circuit name>_witness(inputs_json_string)
// e.g. let wtns = multiplier2_witness("{\"a\": [\"2\"], \"b\": [\"3\"]}")
It will generate a wtns bytes array like the output of witnesscalc or snarkjs.
Convert the wtns to bigints by using the parse_witness_to_bigints function.
let witness = parse_witness_to_bigints(&wtns).unwrap();