Merkle tree fails to compute the root when there's no need in dummy nodes - fix
Sergey Vasilyev swasilyev@gmail.com
Tue, 28 Apr 2020 01:12:21 +0300
1 files changed,
10 insertions(+),
8 deletions(-)
M
crypto-primitives/src/merkle_tree/mod.rs
→
crypto-primitives/src/merkle_tree/mod.rs
@@ -161,14 +161,16 @@ // Now, we compute the dummy nodes until we hit our HEIGHT goal.
let mut cur_height = tree_height; let mut padding_tree = Vec::new(); let mut cur_hash = tree[0].clone(); - while cur_height < (Self::HEIGHT - 1) as usize { - cur_hash = hash_inner_node::<P::H>(¶meters, &cur_hash, &empty_hash, &mut buffer)?; - padding_tree.push((cur_hash.clone(), empty_hash.clone())); - cur_height += 1; - } - - let root_hash = hash_inner_node::<P::H>(¶meters, &cur_hash, &empty_hash, &mut buffer)?; - + let root_hash = if cur_height < Self::HEIGHT as usize { + while cur_height < (Self::HEIGHT - 1) as usize { + cur_hash = hash_inner_node::<P::H>(¶meters, &cur_hash, &empty_hash, &mut buffer)?; + padding_tree.push((cur_hash.clone(), empty_hash.clone())); + cur_height += 1; + } + hash_inner_node::<P::H>(¶meters, &cur_hash, &empty_hash, &mut buffer)? + } else { + cur_hash + }; end_timer!(new_time); Ok(MerkleHashTree {