From d4a4c65d2d46863a1c5be2855c2e2d55a04c7c8e Mon Sep 17 00:00:00 2001 From: "Ya-wen, Jeng" Date: Wed, 5 Feb 2025 10:09:35 +0800 Subject: [PATCH] refactor: use tests and crates folders --- .cargo/config.toml | 2 - Cargo.lock | 95 ++------------ Cargo.toml | 21 +--- README.md | 89 ++++++++++++- crates/Cargo.toml | 18 +++ crates/README.md | 88 +++++++++++++ build.rs => crates/build.rs | 4 - {rapidsnark => crates/rapidsnark}/README.md | 0 .../rapidsnark}/aarch64-apple-darwin/libfq.a | Bin .../rapidsnark}/aarch64-apple-darwin/libfr.a | Bin .../rapidsnark}/aarch64-apple-darwin/libgmp.a | Bin .../librapidsnark-fr-fq.a | Bin .../aarch64-apple-darwin/librapidsnark.a | Bin .../aarch64-apple-darwin/librapidsnark.dylib | Bin .../rapidsnark}/aarch64-apple-ios-sim/libfq.a | Bin .../rapidsnark}/aarch64-apple-ios-sim/libfr.a | Bin .../aarch64-apple-ios-sim/libgmp.a | Bin .../librapidsnark-fr-fq.a | Bin .../aarch64-apple-ios-sim/librapidsnark.a | Bin .../aarch64-apple-ios-sim/librapidsnark.dylib | Bin .../rapidsnark}/aarch64-apple-ios/libfq.a | Bin .../rapidsnark}/aarch64-apple-ios/libfr.a | Bin .../rapidsnark}/aarch64-apple-ios/libgmp.a | Bin .../aarch64-apple-ios/librapidsnark-fr-fq.a | Bin .../aarch64-apple-ios/librapidsnark.a | Bin .../aarch64-apple-ios/librapidsnark.dylib | Bin .../rapidsnark}/aarch64-linux-android/libfq.a | Bin .../rapidsnark}/aarch64-linux-android/libfr.a | Bin .../aarch64-linux-android/libgmp.a | Bin .../librapidsnark-fr-fq.a | Bin .../aarch64-linux-android/librapidsnark.a | Bin .../aarch64-linux-android/librapidsnark.so | Bin .../rapidsnark}/aarch64/libfq.a | Bin .../rapidsnark}/aarch64/libfr.a | Bin .../rapidsnark}/aarch64/libgmp.a | Bin .../rapidsnark}/aarch64/librapidsnark-fr-fq.a | Bin .../rapidsnark}/aarch64/librapidsnark.a | Bin .../rapidsnark}/aarch64/librapidsnark.so | Bin .../rapidsnark}/x86_64-apple-darwin/libfq.a | Bin .../rapidsnark}/x86_64-apple-darwin/libfr.a | Bin .../rapidsnark}/x86_64-apple-darwin/libgmp.a | Bin .../x86_64-apple-darwin/librapidsnark-fr-fq.a | Bin .../x86_64-apple-darwin/librapidsnark.a | Bin .../x86_64-apple-darwin/librapidsnark.dylib | Bin .../rapidsnark}/x86_64-apple-ios/libfq.a | Bin .../rapidsnark}/x86_64-apple-ios/libfr.a | Bin .../rapidsnark}/x86_64-apple-ios/libgmp.a | Bin .../x86_64-apple-ios/librapidsnark-fr-fq.a | Bin .../x86_64-apple-ios/librapidsnark.a | Bin .../x86_64-apple-ios/librapidsnark.dylib | Bin .../rapidsnark}/x86_64-linux-android/libfq.a | Bin .../rapidsnark}/x86_64-linux-android/libfr.a | Bin .../rapidsnark}/x86_64-linux-android/libgmp.a | Bin .../librapidsnark-fr-fq.a | Bin .../x86_64-linux-android/librapidsnark.a | Bin .../x86_64-linux-android/librapidsnark.so | Bin .../rapidsnark}/x86_64/libfq.a | Bin .../rapidsnark}/x86_64/libfr.a | Bin .../rapidsnark}/x86_64/libgmp.a | Bin .../rapidsnark}/x86_64/librapidsnark-fr-fq.a | Bin .../rapidsnark}/x86_64/librapidsnark.a | Bin .../rapidsnark}/x86_64/librapidsnark.so | Bin {src => crates/src}/lib.rs | 117 +----------------- scripts/rapidsnark_build_dir.sh | 13 -- tests/Cargo.toml | 15 +++ tests/build.rs | 3 + tests/src/lib.rs | 117 ++++++++++++++++++ .../keccak256_256_test.vkey.json | 0 .../test-vectors}/keccak256_256_test.wasm | Bin .../test-vectors}/keccak256_256_test.wtns | Bin .../keccak256_256_test_final.zkey | Bin .../test-vectors}/multiplier2.r1cs | Bin .../test-vectors}/multiplier2.vkey.json | 0 .../test-vectors}/multiplier2.wasm | Bin .../test-vectors}/multiplier2_bls.wasm | Bin .../test-vectors}/multiplier2_bls_final.zkey | Bin .../test-vectors}/multiplier2_final.zkey | Bin 77 files changed, 341 insertions(+), 241 deletions(-) delete mode 100644 .cargo/config.toml create mode 100644 crates/Cargo.toml create mode 100644 crates/README.md rename build.rs => crates/build.rs (93%) rename {rapidsnark => crates/rapidsnark}/README.md (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-darwin/libfq.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-darwin/libfr.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-darwin/libgmp.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-darwin/librapidsnark-fr-fq.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-darwin/librapidsnark.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-darwin/librapidsnark.dylib (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-ios-sim/libfq.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-ios-sim/libfr.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-ios-sim/libgmp.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-ios-sim/librapidsnark-fr-fq.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-ios-sim/librapidsnark.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-ios-sim/librapidsnark.dylib (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-ios/libfq.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-ios/libfr.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-ios/libgmp.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-ios/librapidsnark-fr-fq.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-ios/librapidsnark.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-apple-ios/librapidsnark.dylib (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-linux-android/libfq.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-linux-android/libfr.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-linux-android/libgmp.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-linux-android/librapidsnark-fr-fq.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-linux-android/librapidsnark.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64-linux-android/librapidsnark.so (100%) rename {rapidsnark => crates/rapidsnark}/aarch64/libfq.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64/libfr.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64/libgmp.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64/librapidsnark-fr-fq.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64/librapidsnark.a (100%) rename {rapidsnark => crates/rapidsnark}/aarch64/librapidsnark.so (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-apple-darwin/libfq.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-apple-darwin/libfr.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-apple-darwin/libgmp.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-apple-darwin/librapidsnark-fr-fq.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-apple-darwin/librapidsnark.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-apple-darwin/librapidsnark.dylib (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-apple-ios/libfq.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-apple-ios/libfr.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-apple-ios/libgmp.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-apple-ios/librapidsnark-fr-fq.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-apple-ios/librapidsnark.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-apple-ios/librapidsnark.dylib (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-linux-android/libfq.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-linux-android/libfr.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-linux-android/libgmp.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-linux-android/librapidsnark-fr-fq.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-linux-android/librapidsnark.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64-linux-android/librapidsnark.so (100%) rename {rapidsnark => crates/rapidsnark}/x86_64/libfq.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64/libfr.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64/libgmp.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64/librapidsnark-fr-fq.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64/librapidsnark.a (100%) rename {rapidsnark => crates/rapidsnark}/x86_64/librapidsnark.so (100%) rename {src => crates/src}/lib.rs (64%) delete mode 100644 scripts/rapidsnark_build_dir.sh create mode 100644 tests/Cargo.toml create mode 100644 tests/build.rs create mode 100644 tests/src/lib.rs rename {test-vectors => tests/test-vectors}/keccak256_256_test.vkey.json (100%) rename {test-vectors => tests/test-vectors}/keccak256_256_test.wasm (100%) rename {test-vectors => tests/test-vectors}/keccak256_256_test.wtns (100%) rename {test-vectors => tests/test-vectors}/keccak256_256_test_final.zkey (100%) rename {test-vectors => tests/test-vectors}/multiplier2.r1cs (100%) rename {test-vectors => tests/test-vectors}/multiplier2.vkey.json (100%) rename {test-vectors => tests/test-vectors}/multiplier2.wasm (100%) rename {test-vectors => tests/test-vectors}/multiplier2_bls.wasm (100%) rename {test-vectors => tests/test-vectors}/multiplier2_bls_final.zkey (100%) rename {test-vectors => tests/test-vectors}/multiplier2_final.zkey (100%) diff --git a/.cargo/config.toml b/.cargo/config.toml deleted file mode 100644 index 3963d5e..0000000 --- a/.cargo/config.toml +++ /dev/null @@ -1,2 +0,0 @@ -[env] -RUST_RAPIDSNARK_LINK_TEST_WITNESS="1" \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index f939ad7..679a94e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,12 +31,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "itoa" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" - [[package]] name = "jobserver" version = "0.1.32" @@ -52,12 +46,6 @@ version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - [[package]] name = "num-bigint" version = "0.4.6" @@ -92,24 +80,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "proc-macro2" -version = "1.0.93" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" -dependencies = [ - "proc-macro2", -] - [[package]] name = "rust-rapidsnark" version = "0.1.0" @@ -118,16 +88,13 @@ dependencies = [ "cc", "num-bigint", "num-traits", - "rust-witness", - "serde", - "serde_json", ] [[package]] name = "rust-witness" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a367cd88f01e03d529bcfcf0837169a53f8e14c5acf6948c4e556f27b78aef2" +checksum = "aedca7c326ffe9ebb93e282f28d00971139b01c555b9892f450f8b1b3bfbba50" dependencies = [ "cc", "fnv", @@ -137,12 +104,6 @@ dependencies = [ "walkdir", ] -[[package]] -name = "ryu" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" - [[package]] name = "same-file" version = "1.0.6" @@ -152,38 +113,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "serde" -version = "1.0.217" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.217" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.138" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", -] - [[package]] name = "shlex" version = "1.3.0" @@ -191,22 +120,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] -name = "syn" -version = "2.0.96" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +name = "tests" +version = "0.1.0" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "anyhow", + "num-bigint", + "num-traits", + "rust-rapidsnark", + "rust-witness", ] -[[package]] -name = "unicode-ident" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" - [[package]] name = "walkdir" version = "2.5.0" diff --git a/Cargo.toml b/Cargo.toml index 933da6e..2d3ca64 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,18 +1,3 @@ -[package] -name = "rust-rapidsnark" -version = "0.1.0" -edition = "2021" - -[lib] - -[dependencies] -anyhow = "1.0.95" -num-bigint = "0.4.6" -rust-witness = "0.1.2" -serde = { version = "1.0.217", features = ["derive"] } -serde_json = "1.0.135" -num-traits = "0.2.19" - -[build-dependencies] -cc = "1.0" -rust-witness = "0.1.2" +[workspace] +members = ["crates", "tests"] +resolver = "2" diff --git a/README.md b/README.md index 13fd396..d547453 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,88 @@ -# rust-rapidsnark +# Rust Rapidsnark -Rust bindings for the [rapidsnark](https://github.com/iden3/rapidsnark/) prover. + + +This project provides a Rust adapter for compiling and linking [Rapidsnark](https://github.com/iden3/rapidsnark) into a native library for target platforms (e.g., mobile devices). It includes macros and functions to facilitate the integration of proof generation into Rust codebases. + +## Usage + +Include the crate in your `Cargo.toml`: + +```toml +[dependencies] +rust-rapidsnark = "0.1.0" + +[build-dependencies] +rust-rapidsnark = "0.1.0" +``` + +It doesn't include the witness generation functions, you need to use one of the following crates to generate the witness: + +- [rust-witness](https://github.com/chancehudson/rust-witness) +- [witnesscalc-adapter](https://github.com/zkmopro/witnesscalc_adapter) +- [circom-witnesscalc](https://github.com/iden3/circom-witnesscalc) +- [wasmer](https://github.com/wasmerio/wasmer) + +For example, building witness with `witnesscalc-adapter`: + +```rust +witnesscalc_adapter::witness!(multiplier2); +let json_input_string = "{\"a\": [\"2\"], \"b\": [\"3\"]}";; +let wtns_buffer = multiplier2_witness(json_input_string).unwrap(); +``` + +### Calculate the proof + +Calculate the proof by using the `groth16_prover_zkey_file_wrapper` function. +It will take a `wtns` bytes array like the output of [witnesscalc](https://github.com/0xPolygonID/witnesscalc) or [snarkjs](https://github.com/iden3/snarkjs). + +```rust +let zkey_path = "./test-vectors/multiplier2_final.zkey".to_string(); +let proof = rust_rapidsnark::groth16_prover_zkey_file_wrapper(&zkey_path, wtns_buffer).unwrap(); +``` + +### Verify the proof + +Verify the proof by using the `groth16_verifier_zkey_file_wrapper` function. + +```rust +let vkey = std::fs::read_to_string("./test-vectors/keccak256_256_test.vkey.json")?; +let valid = rust_rapidsnark::groth16_verify_wrapper( + &proof.proof, + &proof.public_signals, + &vkey, +)?; +``` + +## Supported platforms + +### Linux + +- x86_64 linux +- arm64 linux + +### MacOS + +- aarch64-apple-darwin +- x86_64-apple-darwin + +### iOS + +- aarch64-apple-ios +- aarch64-apple-ios-sim +- x86_64-apple-ios + +### Android + +- aarch64-linux-android +- x86_64-linux-android + +## Community + +- Website: [zkmopro.com](https://zkmopro.com) +- X account: +- Telegram group: + +## Acknowledgements + +- The project is sponsored by [PSE](https://pse.dev/). diff --git a/crates/Cargo.toml b/crates/Cargo.toml new file mode 100644 index 0000000..96da21d --- /dev/null +++ b/crates/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "rust-rapidsnark" +version = "0.1.0" +edition = "2021" +license = "MIT OR Apache-2.0" +repository = "https://github.com/zkmopro/rust-rapidsnark" +documentation = "https://zkmopro.org/" +homepage = "https://zkmopro.org/" + +[lib] + +[dependencies] +anyhow = "1.0.95" +num-bigint = "0.4.6" +num-traits = "0.2.19" + +[build-dependencies] +cc = "1.0" \ No newline at end of file diff --git a/crates/README.md b/crates/README.md new file mode 100644 index 0000000..d547453 --- /dev/null +++ b/crates/README.md @@ -0,0 +1,88 @@ +# Rust Rapidsnark + + + +This project provides a Rust adapter for compiling and linking [Rapidsnark](https://github.com/iden3/rapidsnark) into a native library for target platforms (e.g., mobile devices). It includes macros and functions to facilitate the integration of proof generation into Rust codebases. + +## Usage + +Include the crate in your `Cargo.toml`: + +```toml +[dependencies] +rust-rapidsnark = "0.1.0" + +[build-dependencies] +rust-rapidsnark = "0.1.0" +``` + +It doesn't include the witness generation functions, you need to use one of the following crates to generate the witness: + +- [rust-witness](https://github.com/chancehudson/rust-witness) +- [witnesscalc-adapter](https://github.com/zkmopro/witnesscalc_adapter) +- [circom-witnesscalc](https://github.com/iden3/circom-witnesscalc) +- [wasmer](https://github.com/wasmerio/wasmer) + +For example, building witness with `witnesscalc-adapter`: + +```rust +witnesscalc_adapter::witness!(multiplier2); +let json_input_string = "{\"a\": [\"2\"], \"b\": [\"3\"]}";; +let wtns_buffer = multiplier2_witness(json_input_string).unwrap(); +``` + +### Calculate the proof + +Calculate the proof by using the `groth16_prover_zkey_file_wrapper` function. +It will take a `wtns` bytes array like the output of [witnesscalc](https://github.com/0xPolygonID/witnesscalc) or [snarkjs](https://github.com/iden3/snarkjs). + +```rust +let zkey_path = "./test-vectors/multiplier2_final.zkey".to_string(); +let proof = rust_rapidsnark::groth16_prover_zkey_file_wrapper(&zkey_path, wtns_buffer).unwrap(); +``` + +### Verify the proof + +Verify the proof by using the `groth16_verifier_zkey_file_wrapper` function. + +```rust +let vkey = std::fs::read_to_string("./test-vectors/keccak256_256_test.vkey.json")?; +let valid = rust_rapidsnark::groth16_verify_wrapper( + &proof.proof, + &proof.public_signals, + &vkey, +)?; +``` + +## Supported platforms + +### Linux + +- x86_64 linux +- arm64 linux + +### MacOS + +- aarch64-apple-darwin +- x86_64-apple-darwin + +### iOS + +- aarch64-apple-ios +- aarch64-apple-ios-sim +- x86_64-apple-ios + +### Android + +- aarch64-linux-android +- x86_64-linux-android + +## Community + +- Website: [zkmopro.com](https://zkmopro.com) +- X account: +- Telegram group: + +## Acknowledgements + +- The project is sponsored by [PSE](https://pse.dev/). diff --git a/build.rs b/crates/build.rs similarity index 93% rename from build.rs rename to crates/build.rs index bd59b9f..0d2730a 100644 --- a/build.rs +++ b/crates/build.rs @@ -4,10 +4,6 @@ use std::path::Path; use std::path::PathBuf; fn main() { - if std::env::var("RUST_RAPIDSNARK_LINK_TEST_WITNESS").is_ok() { - rust_witness::transpile::transpile_wasm("./test-vectors".to_string()); - } - let target = std::env::var("TARGET").unwrap(); let arch = target.split('-').next().unwrap(); diff --git a/rapidsnark/README.md b/crates/rapidsnark/README.md similarity index 100% rename from rapidsnark/README.md rename to crates/rapidsnark/README.md diff --git a/rapidsnark/aarch64-apple-darwin/libfq.a b/crates/rapidsnark/aarch64-apple-darwin/libfq.a similarity index 100% rename from rapidsnark/aarch64-apple-darwin/libfq.a rename to crates/rapidsnark/aarch64-apple-darwin/libfq.a diff --git a/rapidsnark/aarch64-apple-darwin/libfr.a b/crates/rapidsnark/aarch64-apple-darwin/libfr.a similarity index 100% rename from rapidsnark/aarch64-apple-darwin/libfr.a rename to crates/rapidsnark/aarch64-apple-darwin/libfr.a diff --git a/rapidsnark/aarch64-apple-darwin/libgmp.a b/crates/rapidsnark/aarch64-apple-darwin/libgmp.a similarity index 100% rename from rapidsnark/aarch64-apple-darwin/libgmp.a rename to crates/rapidsnark/aarch64-apple-darwin/libgmp.a diff --git a/rapidsnark/aarch64-apple-darwin/librapidsnark-fr-fq.a b/crates/rapidsnark/aarch64-apple-darwin/librapidsnark-fr-fq.a similarity index 100% rename from rapidsnark/aarch64-apple-darwin/librapidsnark-fr-fq.a rename to crates/rapidsnark/aarch64-apple-darwin/librapidsnark-fr-fq.a diff --git a/rapidsnark/aarch64-apple-darwin/librapidsnark.a b/crates/rapidsnark/aarch64-apple-darwin/librapidsnark.a similarity index 100% rename from rapidsnark/aarch64-apple-darwin/librapidsnark.a rename to crates/rapidsnark/aarch64-apple-darwin/librapidsnark.a diff --git a/rapidsnark/aarch64-apple-darwin/librapidsnark.dylib b/crates/rapidsnark/aarch64-apple-darwin/librapidsnark.dylib similarity index 100% rename from rapidsnark/aarch64-apple-darwin/librapidsnark.dylib rename to crates/rapidsnark/aarch64-apple-darwin/librapidsnark.dylib diff --git a/rapidsnark/aarch64-apple-ios-sim/libfq.a b/crates/rapidsnark/aarch64-apple-ios-sim/libfq.a similarity index 100% rename from rapidsnark/aarch64-apple-ios-sim/libfq.a rename to crates/rapidsnark/aarch64-apple-ios-sim/libfq.a diff --git a/rapidsnark/aarch64-apple-ios-sim/libfr.a b/crates/rapidsnark/aarch64-apple-ios-sim/libfr.a similarity index 100% rename from rapidsnark/aarch64-apple-ios-sim/libfr.a rename to crates/rapidsnark/aarch64-apple-ios-sim/libfr.a diff --git a/rapidsnark/aarch64-apple-ios-sim/libgmp.a b/crates/rapidsnark/aarch64-apple-ios-sim/libgmp.a similarity index 100% rename from rapidsnark/aarch64-apple-ios-sim/libgmp.a rename to crates/rapidsnark/aarch64-apple-ios-sim/libgmp.a diff --git a/rapidsnark/aarch64-apple-ios-sim/librapidsnark-fr-fq.a b/crates/rapidsnark/aarch64-apple-ios-sim/librapidsnark-fr-fq.a similarity index 100% rename from rapidsnark/aarch64-apple-ios-sim/librapidsnark-fr-fq.a rename to crates/rapidsnark/aarch64-apple-ios-sim/librapidsnark-fr-fq.a diff --git a/rapidsnark/aarch64-apple-ios-sim/librapidsnark.a b/crates/rapidsnark/aarch64-apple-ios-sim/librapidsnark.a similarity index 100% rename from rapidsnark/aarch64-apple-ios-sim/librapidsnark.a rename to crates/rapidsnark/aarch64-apple-ios-sim/librapidsnark.a diff --git a/rapidsnark/aarch64-apple-ios-sim/librapidsnark.dylib b/crates/rapidsnark/aarch64-apple-ios-sim/librapidsnark.dylib similarity index 100% rename from rapidsnark/aarch64-apple-ios-sim/librapidsnark.dylib rename to crates/rapidsnark/aarch64-apple-ios-sim/librapidsnark.dylib diff --git a/rapidsnark/aarch64-apple-ios/libfq.a b/crates/rapidsnark/aarch64-apple-ios/libfq.a similarity index 100% rename from rapidsnark/aarch64-apple-ios/libfq.a rename to crates/rapidsnark/aarch64-apple-ios/libfq.a diff --git a/rapidsnark/aarch64-apple-ios/libfr.a b/crates/rapidsnark/aarch64-apple-ios/libfr.a similarity index 100% rename from rapidsnark/aarch64-apple-ios/libfr.a rename to crates/rapidsnark/aarch64-apple-ios/libfr.a diff --git a/rapidsnark/aarch64-apple-ios/libgmp.a b/crates/rapidsnark/aarch64-apple-ios/libgmp.a similarity index 100% rename from rapidsnark/aarch64-apple-ios/libgmp.a rename to crates/rapidsnark/aarch64-apple-ios/libgmp.a diff --git a/rapidsnark/aarch64-apple-ios/librapidsnark-fr-fq.a b/crates/rapidsnark/aarch64-apple-ios/librapidsnark-fr-fq.a similarity index 100% rename from rapidsnark/aarch64-apple-ios/librapidsnark-fr-fq.a rename to crates/rapidsnark/aarch64-apple-ios/librapidsnark-fr-fq.a diff --git a/rapidsnark/aarch64-apple-ios/librapidsnark.a b/crates/rapidsnark/aarch64-apple-ios/librapidsnark.a similarity index 100% rename from rapidsnark/aarch64-apple-ios/librapidsnark.a rename to crates/rapidsnark/aarch64-apple-ios/librapidsnark.a diff --git a/rapidsnark/aarch64-apple-ios/librapidsnark.dylib b/crates/rapidsnark/aarch64-apple-ios/librapidsnark.dylib similarity index 100% rename from rapidsnark/aarch64-apple-ios/librapidsnark.dylib rename to crates/rapidsnark/aarch64-apple-ios/librapidsnark.dylib diff --git a/rapidsnark/aarch64-linux-android/libfq.a b/crates/rapidsnark/aarch64-linux-android/libfq.a similarity index 100% rename from rapidsnark/aarch64-linux-android/libfq.a rename to crates/rapidsnark/aarch64-linux-android/libfq.a diff --git a/rapidsnark/aarch64-linux-android/libfr.a b/crates/rapidsnark/aarch64-linux-android/libfr.a similarity index 100% rename from rapidsnark/aarch64-linux-android/libfr.a rename to crates/rapidsnark/aarch64-linux-android/libfr.a diff --git a/rapidsnark/aarch64-linux-android/libgmp.a b/crates/rapidsnark/aarch64-linux-android/libgmp.a similarity index 100% rename from rapidsnark/aarch64-linux-android/libgmp.a rename to crates/rapidsnark/aarch64-linux-android/libgmp.a diff --git a/rapidsnark/aarch64-linux-android/librapidsnark-fr-fq.a b/crates/rapidsnark/aarch64-linux-android/librapidsnark-fr-fq.a similarity index 100% rename from rapidsnark/aarch64-linux-android/librapidsnark-fr-fq.a rename to crates/rapidsnark/aarch64-linux-android/librapidsnark-fr-fq.a diff --git a/rapidsnark/aarch64-linux-android/librapidsnark.a b/crates/rapidsnark/aarch64-linux-android/librapidsnark.a similarity index 100% rename from rapidsnark/aarch64-linux-android/librapidsnark.a rename to crates/rapidsnark/aarch64-linux-android/librapidsnark.a diff --git a/rapidsnark/aarch64-linux-android/librapidsnark.so b/crates/rapidsnark/aarch64-linux-android/librapidsnark.so similarity index 100% rename from rapidsnark/aarch64-linux-android/librapidsnark.so rename to crates/rapidsnark/aarch64-linux-android/librapidsnark.so diff --git a/rapidsnark/aarch64/libfq.a b/crates/rapidsnark/aarch64/libfq.a similarity index 100% rename from rapidsnark/aarch64/libfq.a rename to crates/rapidsnark/aarch64/libfq.a diff --git a/rapidsnark/aarch64/libfr.a b/crates/rapidsnark/aarch64/libfr.a similarity index 100% rename from rapidsnark/aarch64/libfr.a rename to crates/rapidsnark/aarch64/libfr.a diff --git a/rapidsnark/aarch64/libgmp.a b/crates/rapidsnark/aarch64/libgmp.a similarity index 100% rename from rapidsnark/aarch64/libgmp.a rename to crates/rapidsnark/aarch64/libgmp.a diff --git a/rapidsnark/aarch64/librapidsnark-fr-fq.a b/crates/rapidsnark/aarch64/librapidsnark-fr-fq.a similarity index 100% rename from rapidsnark/aarch64/librapidsnark-fr-fq.a rename to crates/rapidsnark/aarch64/librapidsnark-fr-fq.a diff --git a/rapidsnark/aarch64/librapidsnark.a b/crates/rapidsnark/aarch64/librapidsnark.a similarity index 100% rename from rapidsnark/aarch64/librapidsnark.a rename to crates/rapidsnark/aarch64/librapidsnark.a diff --git a/rapidsnark/aarch64/librapidsnark.so b/crates/rapidsnark/aarch64/librapidsnark.so similarity index 100% rename from rapidsnark/aarch64/librapidsnark.so rename to crates/rapidsnark/aarch64/librapidsnark.so diff --git a/rapidsnark/x86_64-apple-darwin/libfq.a b/crates/rapidsnark/x86_64-apple-darwin/libfq.a similarity index 100% rename from rapidsnark/x86_64-apple-darwin/libfq.a rename to crates/rapidsnark/x86_64-apple-darwin/libfq.a diff --git a/rapidsnark/x86_64-apple-darwin/libfr.a b/crates/rapidsnark/x86_64-apple-darwin/libfr.a similarity index 100% rename from rapidsnark/x86_64-apple-darwin/libfr.a rename to crates/rapidsnark/x86_64-apple-darwin/libfr.a diff --git a/rapidsnark/x86_64-apple-darwin/libgmp.a b/crates/rapidsnark/x86_64-apple-darwin/libgmp.a similarity index 100% rename from rapidsnark/x86_64-apple-darwin/libgmp.a rename to crates/rapidsnark/x86_64-apple-darwin/libgmp.a diff --git a/rapidsnark/x86_64-apple-darwin/librapidsnark-fr-fq.a b/crates/rapidsnark/x86_64-apple-darwin/librapidsnark-fr-fq.a similarity index 100% rename from rapidsnark/x86_64-apple-darwin/librapidsnark-fr-fq.a rename to crates/rapidsnark/x86_64-apple-darwin/librapidsnark-fr-fq.a diff --git a/rapidsnark/x86_64-apple-darwin/librapidsnark.a b/crates/rapidsnark/x86_64-apple-darwin/librapidsnark.a similarity index 100% rename from rapidsnark/x86_64-apple-darwin/librapidsnark.a rename to crates/rapidsnark/x86_64-apple-darwin/librapidsnark.a diff --git a/rapidsnark/x86_64-apple-darwin/librapidsnark.dylib b/crates/rapidsnark/x86_64-apple-darwin/librapidsnark.dylib similarity index 100% rename from rapidsnark/x86_64-apple-darwin/librapidsnark.dylib rename to crates/rapidsnark/x86_64-apple-darwin/librapidsnark.dylib diff --git a/rapidsnark/x86_64-apple-ios/libfq.a b/crates/rapidsnark/x86_64-apple-ios/libfq.a similarity index 100% rename from rapidsnark/x86_64-apple-ios/libfq.a rename to crates/rapidsnark/x86_64-apple-ios/libfq.a diff --git a/rapidsnark/x86_64-apple-ios/libfr.a b/crates/rapidsnark/x86_64-apple-ios/libfr.a similarity index 100% rename from rapidsnark/x86_64-apple-ios/libfr.a rename to crates/rapidsnark/x86_64-apple-ios/libfr.a diff --git a/rapidsnark/x86_64-apple-ios/libgmp.a b/crates/rapidsnark/x86_64-apple-ios/libgmp.a similarity index 100% rename from rapidsnark/x86_64-apple-ios/libgmp.a rename to crates/rapidsnark/x86_64-apple-ios/libgmp.a diff --git a/rapidsnark/x86_64-apple-ios/librapidsnark-fr-fq.a b/crates/rapidsnark/x86_64-apple-ios/librapidsnark-fr-fq.a similarity index 100% rename from rapidsnark/x86_64-apple-ios/librapidsnark-fr-fq.a rename to crates/rapidsnark/x86_64-apple-ios/librapidsnark-fr-fq.a diff --git a/rapidsnark/x86_64-apple-ios/librapidsnark.a b/crates/rapidsnark/x86_64-apple-ios/librapidsnark.a similarity index 100% rename from rapidsnark/x86_64-apple-ios/librapidsnark.a rename to crates/rapidsnark/x86_64-apple-ios/librapidsnark.a diff --git a/rapidsnark/x86_64-apple-ios/librapidsnark.dylib b/crates/rapidsnark/x86_64-apple-ios/librapidsnark.dylib similarity index 100% rename from rapidsnark/x86_64-apple-ios/librapidsnark.dylib rename to crates/rapidsnark/x86_64-apple-ios/librapidsnark.dylib diff --git a/rapidsnark/x86_64-linux-android/libfq.a b/crates/rapidsnark/x86_64-linux-android/libfq.a similarity index 100% rename from rapidsnark/x86_64-linux-android/libfq.a rename to crates/rapidsnark/x86_64-linux-android/libfq.a diff --git a/rapidsnark/x86_64-linux-android/libfr.a b/crates/rapidsnark/x86_64-linux-android/libfr.a similarity index 100% rename from rapidsnark/x86_64-linux-android/libfr.a rename to crates/rapidsnark/x86_64-linux-android/libfr.a diff --git a/rapidsnark/x86_64-linux-android/libgmp.a b/crates/rapidsnark/x86_64-linux-android/libgmp.a similarity index 100% rename from rapidsnark/x86_64-linux-android/libgmp.a rename to crates/rapidsnark/x86_64-linux-android/libgmp.a diff --git a/rapidsnark/x86_64-linux-android/librapidsnark-fr-fq.a b/crates/rapidsnark/x86_64-linux-android/librapidsnark-fr-fq.a similarity index 100% rename from rapidsnark/x86_64-linux-android/librapidsnark-fr-fq.a rename to crates/rapidsnark/x86_64-linux-android/librapidsnark-fr-fq.a diff --git a/rapidsnark/x86_64-linux-android/librapidsnark.a b/crates/rapidsnark/x86_64-linux-android/librapidsnark.a similarity index 100% rename from rapidsnark/x86_64-linux-android/librapidsnark.a rename to crates/rapidsnark/x86_64-linux-android/librapidsnark.a diff --git a/rapidsnark/x86_64-linux-android/librapidsnark.so b/crates/rapidsnark/x86_64-linux-android/librapidsnark.so similarity index 100% rename from rapidsnark/x86_64-linux-android/librapidsnark.so rename to crates/rapidsnark/x86_64-linux-android/librapidsnark.so diff --git a/rapidsnark/x86_64/libfq.a b/crates/rapidsnark/x86_64/libfq.a similarity index 100% rename from rapidsnark/x86_64/libfq.a rename to crates/rapidsnark/x86_64/libfq.a diff --git a/rapidsnark/x86_64/libfr.a b/crates/rapidsnark/x86_64/libfr.a similarity index 100% rename from rapidsnark/x86_64/libfr.a rename to crates/rapidsnark/x86_64/libfr.a diff --git a/rapidsnark/x86_64/libgmp.a b/crates/rapidsnark/x86_64/libgmp.a similarity index 100% rename from rapidsnark/x86_64/libgmp.a rename to crates/rapidsnark/x86_64/libgmp.a diff --git a/rapidsnark/x86_64/librapidsnark-fr-fq.a b/crates/rapidsnark/x86_64/librapidsnark-fr-fq.a similarity index 100% rename from rapidsnark/x86_64/librapidsnark-fr-fq.a rename to crates/rapidsnark/x86_64/librapidsnark-fr-fq.a diff --git a/rapidsnark/x86_64/librapidsnark.a b/crates/rapidsnark/x86_64/librapidsnark.a similarity index 100% rename from rapidsnark/x86_64/librapidsnark.a rename to crates/rapidsnark/x86_64/librapidsnark.a diff --git a/rapidsnark/x86_64/librapidsnark.so b/crates/rapidsnark/x86_64/librapidsnark.so similarity index 100% rename from rapidsnark/x86_64/librapidsnark.so rename to crates/rapidsnark/x86_64/librapidsnark.so diff --git a/src/lib.rs b/crates/src/lib.rs similarity index 64% rename from src/lib.rs rename to crates/src/lib.rs index 9f566c6..6028b9e 100644 --- a/src/lib.rs +++ b/crates/src/lib.rs @@ -30,6 +30,7 @@ pub struct ProofResult { pub public_signals: String, } +#[link(name = "rapidsnark", kind = "static")] extern "C" { pub fn groth16_prover_zkey_file( zkey_file_path: *const std::os::raw::c_char, @@ -185,119 +186,3 @@ pub fn groth16_verify_wrapper(proof: &str, inputs: &str, verification_key: &str) Ok(result == 0) } } - -#[cfg(test)] -mod tests { - use anyhow::Result; - use num_bigint::BigInt; - use std::{collections::HashMap, str::FromStr}; - - use crate::{parse_bigints_to_witness, WtnsFn}; - - rust_witness::witness!(multiplier2); - rust_witness::witness!(keccak256256test); - - fn bytes_to_bits(bytes: &[u8]) -> Vec { - let mut bits = Vec::new(); - for &byte in bytes { - for j in 0..8 { - let bit = (byte >> j) & 1; - bits.push(bit == 1); - } - } - bits - } - - fn bytes_to_circuit_inputs(input_vec: &[u8]) -> HashMap> { - let bits = bytes_to_bits(input_vec); - let converted_vec: Vec = bits - .into_iter() - .map(|bit| (bit as i32).to_string()) - .collect(); - let mut inputs = HashMap::new(); - inputs.insert("in".to_string(), converted_vec); - inputs - } - - fn compute_witness( - inputs: HashMap>, - witness_fn: WtnsFn, - ) -> Result> { - // Form the inputs - let bigint_inputs = inputs - .into_iter() - .map(|(k, v)| { - ( - k, - v.into_iter() - .map(|i| BigInt::from_str(&i).unwrap()) - .collect(), - ) - }) - .collect(); - - let wtns: Vec = witness_fn(bigint_inputs); - let witnesscalc_wtns = parse_bigints_to_witness(wtns)?; - Ok(witnesscalc_wtns) - } - - #[test] - fn test_prove_rapidsnark() -> Result<()> { - // Create a new MoproCircom instance - let zkey_path = "./test-vectors/multiplier2_final.zkey".to_string(); - - let mut inputs = HashMap::new(); - let a = BigInt::from_str( - "21888242871839275222246405745257275088548364400416034343698204186575808495616", - ) - .unwrap(); - let b = BigInt::from(1u8); - inputs.insert("a".to_string(), vec![a.to_string()]); - inputs.insert("b".to_string(), vec![b.to_string()]); - - // Generate Witness Buffer - let wtns_buffer = compute_witness(inputs, multiplier2_witness)?; - - // Generate Proof - let proof_result = super::groth16_prover_zkey_file_wrapper(&zkey_path, wtns_buffer)?; - - let vkey = std::fs::read_to_string("./test-vectors/multiplier2.vkey.json")?; - let valid = super::groth16_verify_wrapper( - &proof_result.proof, - &proof_result.public_signals, - &vkey, - )?; - assert!(valid); - Ok(()) - } - - #[test] - fn test_prove_rapidsnark_keccak() -> Result<()> { - // Create a new MoproCircom instance - let zkey_path = "./test-vectors/keccak256_256_test_final.zkey".to_string(); - // Prepare inputs - let input_vec = vec![ - 116, 101, 115, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - ]; - - let inputs = bytes_to_circuit_inputs(&input_vec); - - // Generate Witness Buffer - let wtns_buffer = compute_witness(inputs, keccak256256test_witness)?; - let wtns_data = std::fs::read("./test-vectors/keccak256_256_test.wtns")?; - assert_eq!(wtns_buffer, wtns_data); - - // Generate Proof - let proof_result = super::groth16_prover_zkey_file_wrapper(&zkey_path, wtns_buffer)?; - - let vkey = std::fs::read_to_string("./test-vectors/keccak256_256_test.vkey.json")?; - let valid = super::groth16_verify_wrapper( - &proof_result.proof, - &proof_result.public_signals, - &vkey, - )?; - assert!(valid); - Ok(()) - } -} diff --git a/scripts/rapidsnark_build_dir.sh b/scripts/rapidsnark_build_dir.sh deleted file mode 100644 index e90c192..0000000 --- a/scripts/rapidsnark_build_dir.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -set -e - -BUILD_DIR=$(mktemp -d) - -git clone https://github.com/chancehudson/rapidsnark.git $BUILD_DIR -cd $BUILD_DIR - -git submodule init -git submodule update - -build_gmp.sh diff --git a/tests/Cargo.toml b/tests/Cargo.toml new file mode 100644 index 0000000..9f71b78 --- /dev/null +++ b/tests/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "tests" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0.95" +num-bigint = "0.4.6" +num-traits = "0.2.19" +rust-rapidsnark = { path = "../crates" } +rust-witness = "0.1.3" + +[build-dependencies] +rust-rapidsnark = { path = "../crates" } +rust-witness = "0.1.3" diff --git a/tests/build.rs b/tests/build.rs new file mode 100644 index 0000000..00f897c --- /dev/null +++ b/tests/build.rs @@ -0,0 +1,3 @@ +fn main() { + rust_witness::transpile::transpile_wasm("./test-vectors".to_string()); +} diff --git a/tests/src/lib.rs b/tests/src/lib.rs new file mode 100644 index 0000000..5cdf40f --- /dev/null +++ b/tests/src/lib.rs @@ -0,0 +1,117 @@ +#[cfg(test)] +mod tests { + use anyhow::Result; + use num_bigint::BigInt; + use std::{collections::HashMap, str::FromStr}; + + use rust_rapidsnark::{parse_bigints_to_witness, WtnsFn}; + + rust_witness::witness!(multiplier2); + rust_witness::witness!(keccak256256test); + + fn bytes_to_bits(bytes: &[u8]) -> Vec { + let mut bits = Vec::new(); + for &byte in bytes { + for j in 0..8 { + let bit = (byte >> j) & 1; + bits.push(bit == 1); + } + } + bits + } + + fn bytes_to_circuit_inputs(input_vec: &[u8]) -> HashMap> { + let bits = bytes_to_bits(input_vec); + let converted_vec: Vec = bits + .into_iter() + .map(|bit| (bit as i32).to_string()) + .collect(); + let mut inputs = HashMap::new(); + inputs.insert("in".to_string(), converted_vec); + inputs + } + + fn compute_witness( + inputs: HashMap>, + witness_fn: WtnsFn, + ) -> Result> { + // Form the inputs + let bigint_inputs = inputs + .into_iter() + .map(|(k, v)| { + ( + k, + v.into_iter() + .map(|i| BigInt::from_str(&i).unwrap()) + .collect(), + ) + }) + .collect(); + + let wtns: Vec = witness_fn(bigint_inputs); + let witnesscalc_wtns = parse_bigints_to_witness(wtns)?; + Ok(witnesscalc_wtns) + } + + #[test] + fn test_prove_rapidsnark() -> Result<()> { + // Create a new MoproCircom instance + let zkey_path = "./test-vectors/multiplier2_final.zkey".to_string(); + + let mut inputs = HashMap::new(); + let a = BigInt::from_str( + "21888242871839275222246405745257275088548364400416034343698204186575808495616", + ) + .unwrap(); + let b = BigInt::from(1u8); + inputs.insert("a".to_string(), vec![a.to_string()]); + inputs.insert("b".to_string(), vec![b.to_string()]); + + // Generate Witness Buffer + let wtns_buffer = compute_witness(inputs, multiplier2_witness)?; + + // Generate Proof + let proof_result = + rust_rapidsnark::groth16_prover_zkey_file_wrapper(&zkey_path, wtns_buffer)?; + + let vkey = std::fs::read_to_string("./test-vectors/multiplier2.vkey.json")?; + let valid = rust_rapidsnark::groth16_verify_wrapper( + &proof_result.proof, + &proof_result.public_signals, + &vkey, + )?; + assert!(valid); + Ok(()) + } + + #[test] + fn test_prove_rapidsnark_keccak() -> Result<()> { + // Create a new MoproCircom instance + let zkey_path = "./test-vectors/keccak256_256_test_final.zkey".to_string(); + // Prepare inputs + let input_vec = vec![ + 116, 101, 115, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + ]; + + let inputs = bytes_to_circuit_inputs(&input_vec); + + // Generate Witness Buffer + let wtns_buffer = compute_witness(inputs, keccak256256test_witness)?; + let wtns_data = std::fs::read("./test-vectors/keccak256_256_test.wtns")?; + assert_eq!(wtns_buffer, wtns_data); + + // Generate Proof + let proof_result = + rust_rapidsnark::groth16_prover_zkey_file_wrapper(&zkey_path, wtns_buffer)?; + + let vkey = std::fs::read_to_string("./test-vectors/keccak256_256_test.vkey.json")?; + let valid = rust_rapidsnark::groth16_verify_wrapper( + &proof_result.proof, + &proof_result.public_signals, + &vkey, + )?; + assert!(valid); + Ok(()) + } +} diff --git a/test-vectors/keccak256_256_test.vkey.json b/tests/test-vectors/keccak256_256_test.vkey.json similarity index 100% rename from test-vectors/keccak256_256_test.vkey.json rename to tests/test-vectors/keccak256_256_test.vkey.json diff --git a/test-vectors/keccak256_256_test.wasm b/tests/test-vectors/keccak256_256_test.wasm similarity index 100% rename from test-vectors/keccak256_256_test.wasm rename to tests/test-vectors/keccak256_256_test.wasm diff --git a/test-vectors/keccak256_256_test.wtns b/tests/test-vectors/keccak256_256_test.wtns similarity index 100% rename from test-vectors/keccak256_256_test.wtns rename to tests/test-vectors/keccak256_256_test.wtns diff --git a/test-vectors/keccak256_256_test_final.zkey b/tests/test-vectors/keccak256_256_test_final.zkey similarity index 100% rename from test-vectors/keccak256_256_test_final.zkey rename to tests/test-vectors/keccak256_256_test_final.zkey diff --git a/test-vectors/multiplier2.r1cs b/tests/test-vectors/multiplier2.r1cs similarity index 100% rename from test-vectors/multiplier2.r1cs rename to tests/test-vectors/multiplier2.r1cs diff --git a/test-vectors/multiplier2.vkey.json b/tests/test-vectors/multiplier2.vkey.json similarity index 100% rename from test-vectors/multiplier2.vkey.json rename to tests/test-vectors/multiplier2.vkey.json diff --git a/test-vectors/multiplier2.wasm b/tests/test-vectors/multiplier2.wasm similarity index 100% rename from test-vectors/multiplier2.wasm rename to tests/test-vectors/multiplier2.wasm diff --git a/test-vectors/multiplier2_bls.wasm b/tests/test-vectors/multiplier2_bls.wasm similarity index 100% rename from test-vectors/multiplier2_bls.wasm rename to tests/test-vectors/multiplier2_bls.wasm diff --git a/test-vectors/multiplier2_bls_final.zkey b/tests/test-vectors/multiplier2_bls_final.zkey similarity index 100% rename from test-vectors/multiplier2_bls_final.zkey rename to tests/test-vectors/multiplier2_bls_final.zkey diff --git a/test-vectors/multiplier2_final.zkey b/tests/test-vectors/multiplier2_final.zkey similarity index 100% rename from test-vectors/multiplier2_final.zkey rename to tests/test-vectors/multiplier2_final.zkey