diff --git a/crates/core/executor/src/artifacts/mips_costs.json b/crates/core/executor/src/artifacts/mips_costs.json index 3064e02be..ea53f8818 100644 --- a/crates/core/executor/src/artifacts/mips_costs.json +++ b/crates/core/executor/src/artifacts/mips_costs.json @@ -2,7 +2,6 @@ "U256XU2048Mul": 5849, "Bn254Fp2MulAssign": 2885, "CloClz": 46, - "BooleanCircuitGarble": 588, "Bls12831Fp2AddSubAssign": 2070, "SyscallInstrs": 80, "DivRem": 162, @@ -17,6 +16,7 @@ "Program": 31, "Global": 115, "Secp256k1AddAssign": 4013, + "BooleanCircuitGarble": 588, "AddSub": 47, "Jump": 82, "Bn254FpOpAssign": 704, diff --git a/crates/core/executor/src/executor.rs b/crates/core/executor/src/executor.rs index 4a3eb7353..59500612c 100644 --- a/crates/core/executor/src/executor.rs +++ b/crates/core/executor/src/executor.rs @@ -2385,7 +2385,8 @@ impl<'a> Executor<'a> { #[inline] fn inc_shard_if_need(&mut self) -> bool { if self.executor_mode == ExecutorMode::Trace { - if !self.state.records_clk.is_empty() + let records_clk_index = self.state.records_clk_index as usize; + if records_clk_index < self.state.records_clk.len() && self.state.clk >= self.state.records_clk[self.state.records_clk_index as usize] { self.state.current_shard += 1; diff --git a/crates/verifier/src/groth16/error.rs b/crates/verifier/src/groth16/error.rs index 18d8e2dcb..37628424e 100644 --- a/crates/verifier/src/groth16/error.rs +++ b/crates/verifier/src/groth16/error.rs @@ -12,4 +12,6 @@ pub enum Groth16Error { GeneralError(#[from] crate::error::Error), #[error("Groth16 vkey hash mismatch")] Groth16VkeyHashMismatch, + #[error("Failed to convert public input: {0}")] + InputConversion(String), } diff --git a/crates/verifier/src/groth16/mod.rs b/crates/verifier/src/groth16/mod.rs index f81088069..6af12226b 100644 --- a/crates/verifier/src/groth16/mod.rs +++ b/crates/verifier/src/groth16/mod.rs @@ -121,11 +121,18 @@ impl Groth16Verifier { public_inputs: &[[u8; 32]], groth16_vk: &[u8], ) -> Result<(), Groth16Error> { - let proof = load_groth16_proof_from_bytes(proof).unwrap(); - let groth16_vk = load_groth16_verifying_key_from_bytes(groth16_vk).unwrap(); + let proof = load_groth16_proof_from_bytes(proof)?; + let groth16_vk = load_groth16_verifying_key_from_bytes(groth16_vk)?; + + let public_inputs = public_inputs + .iter() + .map(|input| { + Fr::from_slice(input).map_err(|e| { + Groth16Error::InputConversion(format!("Failed to convert public input: {e}")) + }) + }) + .collect::, _>>()?; - let public_inputs = - public_inputs.iter().map(|input| Fr::from_slice(input).unwrap()).collect::>(); verify_groth16_algebraic(&groth16_vk, &proof, &public_inputs) } } diff --git a/crates/verifier/src/plonk/error.rs b/crates/verifier/src/plonk/error.rs index e744cb844..e0f62ee9f 100644 --- a/crates/verifier/src/plonk/error.rs +++ b/crates/verifier/src/plonk/error.rs @@ -28,6 +28,8 @@ pub enum PlonkError { TranscriptError, #[error("Plonk vkey hash mismatch")] PlonkVkeyHashMismatch, + #[error("Failed to convert public input: {0}")] + InputConversion(String), #[error("General error")] GeneralError(#[from] crate::error::Error), } diff --git a/crates/verifier/src/plonk/mod.rs b/crates/verifier/src/plonk/mod.rs index 7e74d9c9f..5273cf31a 100644 --- a/crates/verifier/src/plonk/mod.rs +++ b/crates/verifier/src/plonk/mod.rs @@ -99,11 +99,18 @@ impl PlonkVerifier { public_inputs: &[[u8; 32]], plonk_vk: &[u8], ) -> Result<(), PlonkError> { - let plonk_vk = load_plonk_verifying_key_from_bytes(plonk_vk).unwrap(); - let proof = load_plonk_proof_from_bytes(proof, plonk_vk.qcp.len()).unwrap(); + let plonk_vk = load_plonk_verifying_key_from_bytes(plonk_vk)?; + let proof = load_plonk_proof_from_bytes(proof, plonk_vk.qcp.len())?; + + let public_inputs = public_inputs + .iter() + .map(|input| { + Fr::from_slice(input).map_err(|e| { + PlonkError::InputConversion(format!("Failed to convert public input: {e}")) + }) + }) + .collect::, _>>()?; - let public_inputs = - public_inputs.iter().map(|input| Fr::from_slice(input).unwrap()).collect::>(); verify_plonk_algebraic(&plonk_vk, &proof, &public_inputs) } }