in akd_client/src/verify.rs [22:54]
fn verify_membership(root_hash: Digest, proof: &MembershipProof) -> Result<(), VerificationError> {
if proof.label.len == 0 {
let final_hash = merge(&[proof.hash_val, proof.label.hash()]);
if final_hash == root_hash {
return Ok(());
} else {
return Err(verify_error!(
MembershipProof,
(),
"Membership proof for root did not verify".to_string()
));
}
}
let mut final_hash = merge(&[proof.hash_val, proof.label.hash()]);
for parent in proof.layer_proofs.iter().rev() {
let hashes = parent.siblings.iter().map(|s| s.hash).collect();
final_hash = build_and_hash_layer(hashes, parent.direction, final_hash, parent.label)?;
}
if final_hash == root_hash {
Ok(())
} else {
Err(verify_error!(
MembershipProof,
(),
format!(
"Membership proof for label {:?} did not verify",
proof.label
)
))
}
}