pub fn verify_gnark_proof(
        proof: &[u8],
        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 public_inputs =
            public_inputs.iter().map(|input| Fr::from_slice(input).unwrap()).collect::<Vec<_>>();
        verify_plonk_algebraic(&plonk_vk, &proof, &public_inputs)
    }
Verifies a Gnark PLONK proof using raw byte inputs.

WARNING: if you're verifying an SP1 proof, you should use [`verify`] instead.
This is a lower-level verification method that works directly with raw bytes rather than
the SP1 SDK's data structures.

# Arguments

* `proof` - The raw PLONK proof bytes (without the 4-byte vkey hash prefix)
* `public_inputs` - The public inputs to the circuit
* `plonk_vk` - The PLONK verifying key bytes

# Returns

A [`Result`] containing unit `()` if the proof is valid,
or a [`PlonkError`] if verification fails.
crates/verifier/src/plonk/mod.rs