add mpack proof func

This commit is contained in:
Jaremy Creechley 2023-12-11 11:26:27 -07:00
parent 50009d46d1
commit 60e341912f
No known key found for this signature in database
GPG Key ID: 4E66FB67B21D3300

View File

@ -81,6 +81,44 @@ impl StorageProofs {
Ok(()) Ok(())
} }
pub fn prove_mpack(
&mut self,
proof_bytes: &mut Vec<u8>,
public_inputs_bytes: &mut Vec<u8>,
) -> Result<(), String> {
let mut builder = self.builder.clone();
// vec of vecs is flattened, since wasm expects a contiguous array in memory
// chunks.iter().for_each(|c| builder.push_input("chunks", *c));
// siblings
// .iter()
// .for_each(|c| builder.push_input("siblings", *c));
// hashes.iter().for_each(|c| builder.push_input("hashes", *c));
// path.iter().for_each(|c| builder.push_input("path", *c));
// builder.push_input("root", root);
// builder.push_input("salt", salt);
let circuit = builder.build()
.map_err(|e| e.to_string())?;
let inputs = circuit
.get_public_inputs()
.ok_or("Unable to get public inputs!")?;
let proof = prove(circuit, &self.params, &mut self.rng).map_err(|e| e.to_string())?;
proof.serialize(proof_bytes).map_err(|e| e.to_string())?;
inputs
.serialize(public_inputs_bytes)
.map_err(|e| e.to_string())?;
Ok(())
}
pub fn verify<RR: Read>( pub fn verify<RR: Read>(
&mut self, &mut self,
proof_bytes: RR, proof_bytes: RR,