pub fn vkeys(path: &str, args: BuildArgs) -> HashMap<String, String> {
    let program_dir = std::path::Path::new(path);
    let metadata_file = program_dir.join("Cargo.toml");
    let mut metadata_cmd = cargo_metadata::MetadataCommand::new();
    let metadata = metadata_cmd.manifest_path(metadata_file).exec().unwrap();
    let target_elf_paths =
        generate_elf_paths(&metadata, Some(&args)).expect("failed to collect target ELF paths");
    let prover = SP1Prover::<CpuProverComponents>::new();

    target_elf_paths
        .into_iter()
        .map(|(target_name, elf_path)| {
            let mut file = File::open(elf_path).unwrap();
            let mut elf = Vec::new();
            file.read_to_end(&mut elf).unwrap();

            let (_, _, _, vk) = prover.setup(&elf);
            let vk = vk.bytes32();

            (target_name, vk)
        })
        .collect()
}
Returns the verification keys for the provided programs in a [`HashMap`] with the target names
as keys and vkeys as values.

# Arguments

* `path` - A string slice that holds the path to the program directory.
* `args` - A [`BuildArgs`] struct that contains various build configuration options.

Note: If used in a script `build.rs`, this function should be called *after* [`build_program`]
to returns the vkey corresponding to the latest program version which has just been compiled.
crates/build/src/lib.rs