From f9a7ec8f3210121bf22d0706bfd3ed8128a49662 Mon Sep 17 00:00:00 2001 From: "Ya-wen, Jeng" Date: Wed, 29 Jan 2025 14:54:32 +0800 Subject: [PATCH 1/2] feat: load .dat from build folder --- tests/src/lib.rs | 24 +++++++++--------------- witnesscalc_adapter/src/lib.rs | 9 +++++---- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/tests/src/lib.rs b/tests/src/lib.rs index 6d5c125..e8f9ec7 100644 --- a/tests/src/lib.rs +++ b/tests/src/lib.rs @@ -5,22 +5,16 @@ witnesscalc_adapter::witness!(multiplier2); witnesscalc_adapter::witness!(keccak256_256_test); witnesscalc_adapter::witness!(rsa_main); -pub fn create_witness(inputs: HashMap>, dat_file_path: &str) -> Vec { - multiplier2_witness(inputs, dat_file_path) +pub fn create_witness(inputs: HashMap>) -> Vec { + multiplier2_witness(inputs) } -pub fn create_keccak256_256_test_witness( - inputs: HashMap>, - dat_file_path: &str, -) -> Vec { - keccak256_256_test_witness(inputs, dat_file_path) +pub fn create_keccak256_256_test_witness(inputs: HashMap>) -> Vec { + keccak256_256_test_witness(inputs) } -pub fn create_rsa_main_witness( - inputs: HashMap>, - dat_file_path: &str, -) -> Vec { - rsa_main_witness(inputs, dat_file_path) +pub fn create_rsa_main_witness(inputs: HashMap>) -> Vec { + rsa_main_witness(inputs) } #[cfg(test)] @@ -44,7 +38,7 @@ mod test { inputs.insert("a".to_string(), vec![a]); inputs.insert("b".to_string(), vec![b]); - let result = create_witness(inputs, "./testdata/multiplier2.dat"); + let result = create_witness(inputs); assert_eq!(result.len(), 4); assert_eq!(result[0], BigInt::from(1u8)); @@ -66,7 +60,7 @@ mod test { use std::time::Instant; let start = Instant::now(); - let _ = create_keccak256_256_test_witness(inputs, "./testdata/keccak256_256_test.dat"); + let _ = create_keccak256_256_test_witness(inputs); let end = Instant::now(); println!( "Time taken for keccak256_256_test: {:?}", @@ -205,7 +199,7 @@ mod test { use std::time::Instant; let start = Instant::now(); - let _ = create_rsa_main_witness(inputs_bigint, "./testdata/rsa_main.dat"); + let _ = create_rsa_main_witness(inputs_bigint); let end = Instant::now(); println!("Time taken for rsa_main: {:?}", end.duration_since(start)); } diff --git a/witnesscalc_adapter/src/lib.rs b/witnesscalc_adapter/src/lib.rs index dd4cd01..9ad7ec6 100644 --- a/witnesscalc_adapter/src/lib.rs +++ b/witnesscalc_adapter/src/lib.rs @@ -8,6 +8,7 @@ pub mod convert_witness; macro_rules! witness { ($x: ident) => { $crate::paste::paste! { + const [<$x _CIRCUIT_DATA>]: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/witnesscalc/src/", stringify!($x), ".dat")); #[link(name = "witnesscalc_" [<$x>], kind = "static")] extern "C" { fn []( @@ -23,7 +24,7 @@ macro_rules! witness { } } $crate::paste::item! { - pub fn [<$x _witness>])>>(inputs: I, dat_file_path: &str) -> Vec { + pub fn [<$x _witness>])>>(inputs: I) -> Vec { println!("Generating witness for circuit {}", stringify!($x)); unsafe { //TODO: refactor the C++ code in witnesscalc to not rely on JSON but take the inputs directly? @@ -40,9 +41,9 @@ macro_rules! witness { let json_input = std::ffi::CString::new($crate::serde_json::to_string(&json).expect("Failed to serialize JSON")).unwrap(); let json_size = json_input.as_bytes().len() as std::ffi::c_ulong; - let circuit_data = std::fs::read(dat_file_path).unwrap(); - let circuit_buffer = circuit_data.as_ptr() as *const std::ffi::c_char; - let circuit_size = circuit_data.len() as std::ffi::c_ulong; + let circuit_buffer = [<$x _CIRCUIT_DATA>].as_ptr() as *const std::ffi::c_char; + let circuit_size = [<$x _CIRCUIT_DATA>].len() as std::ffi::c_ulong; + //TODO dynamically allocate the buffer? let mut wtns_buffer = vec![0u8; 100 * 1024 * 1024]; // 8 MB buffer From 8f5440beb6431e6b4f08cd28c391948e71df2dd0 Mon Sep 17 00:00:00 2001 From: "Ya-wen, Jeng" Date: Wed, 29 Jan 2025 14:59:35 +0800 Subject: [PATCH 2/2] chore: allow warning --- witnesscalc_adapter/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/witnesscalc_adapter/src/lib.rs b/witnesscalc_adapter/src/lib.rs index 9ad7ec6..91853ed 100644 --- a/witnesscalc_adapter/src/lib.rs +++ b/witnesscalc_adapter/src/lib.rs @@ -8,6 +8,7 @@ pub mod convert_witness; macro_rules! witness { ($x: ident) => { $crate::paste::paste! { + #[allow(non_upper_case_globals)] const [<$x _CIRCUIT_DATA>]: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/witnesscalc/src/", stringify!($x), ".dat")); #[link(name = "witnesscalc_" [<$x>], kind = "static")] extern "C" {