openvm_verify_stark/
host.rs

1use openvm_native_recursion::hints::Hintable;
2use openvm_rv32im_guest::hint_load_by_key_encode;
3use openvm_sdk::SC;
4use openvm_stark_sdk::{openvm_stark_backend::proof::Proof, p3_baby_bear::BabyBear};
5
6/// Compute the hint key for `verify_openvm_stark` function, which reads a stark proof from stream
7/// `kv_store`.
8pub fn compute_hint_key_for_verify_openvm_stark(
9    asm_filename: &str,
10    exe_commit_u32: &[u32; 8],
11    vm_commit_u32: &[u32; 8],
12    pvs: &[u8],
13) -> Vec<u8> {
14    asm_filename
15        .as_bytes()
16        .iter()
17        .cloned()
18        .chain(exe_commit_u32.iter().flat_map(|x| x.to_le_bytes()))
19        .chain(vm_commit_u32.iter().flat_map(|x| x.to_le_bytes()))
20        .chain(pvs.iter().cloned())
21        .collect()
22}
23
24/// Encode a proof into a KV store value so `verify_openvm_stark` can hint it.
25pub fn encode_proof_to_kv_store_value(proof: &Proof<SC>) -> Vec<u8> {
26    let to_encode: Vec<Vec<BabyBear>> = proof.write();
27    hint_load_by_key_encode(&to_encode)
28}