From e325ebd4e4f35c890141b5067f8bc5e7a98a32d0 Mon Sep 17 00:00:00 2001 From: vivianjeng Date: Wed, 26 Feb 2025 13:18:48 +0800 Subject: [PATCH 1/6] feat: link to dylib --- crates/build.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/build.rs b/crates/build.rs index 95c7789..0fc9440 100644 --- a/crates/build.rs +++ b/crates/build.rs @@ -49,6 +49,7 @@ fn main() { ); println!("cargo:rustc-link-lib=static=rapidsnark"); + println!("cargo:rustc-link-lib=dylib=rapidsnark"); println!("cargo:rustc-link-lib={}", cpp_stdlib); if target.contains("android") { // pthread is included in libc in android @@ -59,6 +60,9 @@ fn main() { println!("cargo:rustc-link-lib=static=fr"); println!("cargo:rustc-link-lib=static=fq"); println!("cargo:rustc-link-lib=static=gmp"); + println!("cargo:rustc-link-lib=dylib=fr"); + println!("cargo:rustc-link-lib=dylib=fq"); + println!("cargo:rustc-link-lib=dylib=gmp"); // refer to https://github.com/bbqsrc/cargo-ndk to see how to link the libc++_shared.so file in Android if env::var("CARGO_CFG_TARGET_OS").unwrap() == "android" { From 0ef167f8a4c2686b287042058e7d1d015ac09327 Mon Sep 17 00:00:00 2001 From: "Ya-wen, Jeng" Date: Wed, 26 Feb 2025 15:09:05 +0800 Subject: [PATCH 2/6] fix: not linking dylib to ios --- crates/build.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/crates/build.rs b/crates/build.rs index 0fc9440..85a0e07 100644 --- a/crates/build.rs +++ b/crates/build.rs @@ -49,7 +49,6 @@ fn main() { ); println!("cargo:rustc-link-lib=static=rapidsnark"); - println!("cargo:rustc-link-lib=dylib=rapidsnark"); println!("cargo:rustc-link-lib={}", cpp_stdlib); if target.contains("android") { // pthread is included in libc in android @@ -60,9 +59,13 @@ fn main() { println!("cargo:rustc-link-lib=static=fr"); println!("cargo:rustc-link-lib=static=fq"); println!("cargo:rustc-link-lib=static=gmp"); - println!("cargo:rustc-link-lib=dylib=fr"); - println!("cargo:rustc-link-lib=dylib=fq"); - println!("cargo:rustc-link-lib=dylib=gmp"); + + if !env::var("CARGO_CFG_TARGET_OS").unwrap().contains("ios") { + println!("cargo:rustc-link-lib=dylib=rapidsnark"); + println!("cargo:rustc-link-lib=dylib=fr"); + println!("cargo:rustc-link-lib=dylib=fq"); + println!("cargo:rustc-link-lib=dylib=gmp"); + } // refer to https://github.com/bbqsrc/cargo-ndk to see how to link the libc++_shared.so file in Android if env::var("CARGO_CFG_TARGET_OS").unwrap() == "android" { From 145cc0a2624af00a65571a2e06daea46051ae009 Mon Sep 17 00:00:00 2001 From: "Ya-wen, Jeng" Date: Fri, 28 Feb 2025 10:18:04 +0800 Subject: [PATCH 3/6] fix: don't link dylib to android and ios --- crates/build.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/build.rs b/crates/build.rs index 85a0e07..0aef23c 100644 --- a/crates/build.rs +++ b/crates/build.rs @@ -60,7 +60,9 @@ fn main() { println!("cargo:rustc-link-lib=static=fq"); println!("cargo:rustc-link-lib=static=gmp"); - if !env::var("CARGO_CFG_TARGET_OS").unwrap().contains("ios") { + if !(env::var("CARGO_CFG_TARGET_OS").unwrap().contains("ios") + || env::var("CARGO_CFG_TARGET_OS").unwrap().contains("android")) + { println!("cargo:rustc-link-lib=dylib=rapidsnark"); println!("cargo:rustc-link-lib=dylib=fr"); println!("cargo:rustc-link-lib=dylib=fq"); From 59f134d2e892f721cf4c67b629bcceb6fdb7a93d Mon Sep 17 00:00:00 2001 From: "Ya-wen, Jeng" Date: Thu, 6 Mar 2025 11:32:22 +0800 Subject: [PATCH 4/6] fix: fix format zkey --- crates/src/lib.rs | 3 ++- tests/src/lib.rs | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/crates/src/lib.rs b/crates/src/lib.rs index b89527f..8a45620 100644 --- a/crates/src/lib.rs +++ b/crates/src/lib.rs @@ -116,6 +116,7 @@ pub fn groth16_prover_zkey_file_wrapper( zkey_path: &str, wtns_buffer: Vec, ) -> Result { + let formatted_zkey_path: &str = &zkey_path.to_string(); let wtns_size = wtns_buffer.len() as u64; let mut proof_buffer = vec![0u8; 4 * 1024 * 1024]; // Adjust size as needed @@ -131,7 +132,7 @@ pub fn groth16_prover_zkey_file_wrapper( unsafe { let result = groth16_prover_zkey_file( - zkey_path.as_ptr() as *const std::ffi::c_char, + formatted_zkey_path.as_ptr() as *const std::ffi::c_char, wtns_buffer.as_ptr() as *const std::os::raw::c_void, // Witness buffer wtns_size, proof_ptr, diff --git a/tests/src/lib.rs b/tests/src/lib.rs index 5cdf40f..c416c76 100644 --- a/tests/src/lib.rs +++ b/tests/src/lib.rs @@ -56,7 +56,7 @@ mod tests { #[test] fn test_prove_rapidsnark() -> Result<()> { // Create a new MoproCircom instance - let zkey_path = "./test-vectors/multiplier2_final.zkey".to_string(); + let zkey_path = "./test-vectors/multiplier2_final.zkey"; let mut inputs = HashMap::new(); let a = BigInt::from_str( @@ -72,7 +72,7 @@ mod tests { // Generate Proof let proof_result = - rust_rapidsnark::groth16_prover_zkey_file_wrapper(&zkey_path, wtns_buffer)?; + 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( @@ -87,7 +87,7 @@ mod tests { #[test] fn test_prove_rapidsnark_keccak() -> Result<()> { // Create a new MoproCircom instance - let zkey_path = "./test-vectors/keccak256_256_test_final.zkey".to_string(); + let zkey_path = "./test-vectors/keccak256_256_test_final.zkey"; // 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, @@ -103,7 +103,7 @@ mod tests { // Generate Proof let proof_result = - rust_rapidsnark::groth16_prover_zkey_file_wrapper(&zkey_path, wtns_buffer)?; + 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( From fb1cd7946cfc55e877860e2d296286a93074e629 Mon Sep 17 00:00:00 2001 From: "Ya-wen, Jeng" Date: Thu, 6 Mar 2025 11:46:14 +0800 Subject: [PATCH 5/6] fix: fix CI, fix zkey_path --- .github/workflows/build-and-test.yml | 1 + crates/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index e7489b9..c2e83a2 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -15,6 +15,7 @@ env: jobs: clippy_check: runs-on: ubuntu-latest + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name env: RUSTFLAGS: "-Dwarnings" # Make sure CI fails on all warnings, including Clippy lints steps: diff --git a/crates/src/lib.rs b/crates/src/lib.rs index 8a45620..b9bf997 100644 --- a/crates/src/lib.rs +++ b/crates/src/lib.rs @@ -116,7 +116,7 @@ pub fn groth16_prover_zkey_file_wrapper( zkey_path: &str, wtns_buffer: Vec, ) -> Result { - let formatted_zkey_path: &str = &zkey_path.to_string(); + let formatted_zkey_path = zkey_path.to_string(); let wtns_size = wtns_buffer.len() as u64; let mut proof_buffer = vec![0u8; 4 * 1024 * 1024]; // Adjust size as needed From f1e9597e767660553ea464d02382058551635ffe Mon Sep 17 00:00:00 2001 From: "Ya-wen, Jeng" Date: Thu, 6 Mar 2025 12:01:51 +0800 Subject: [PATCH 6/6] fix: fix init zkey path --- crates/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/src/lib.rs b/crates/src/lib.rs index b9bf997..53b003d 100644 --- a/crates/src/lib.rs +++ b/crates/src/lib.rs @@ -116,7 +116,7 @@ pub fn groth16_prover_zkey_file_wrapper( zkey_path: &str, wtns_buffer: Vec, ) -> Result { - let formatted_zkey_path = zkey_path.to_string(); + let formatted_zkey_path = std::ffi::CString::new(zkey_path).unwrap(); let wtns_size = wtns_buffer.len() as u64; let mut proof_buffer = vec![0u8; 4 * 1024 * 1024]; // Adjust size as needed