fix merkle tree malleability

This commit is contained in:
Garrick Ollivander 2016-10-29 17:55:47 +02:00
parent fdaf2ba6af
commit ab3ffafdcd
No known key found for this signature in database
GPG key ID: C6A92846C2C60645

View file

@ -163,13 +163,13 @@ impl Hashed for HPair {
} }
} }
/// An iterator over hashes in a vector that pairs them to build a row in a /// An iterator over hashes in a vector that pairs them to build a row in a
/// Merkle tree. If the vector has an odd number of hashes, duplicates the last. /// Merkle tree. If the vector has an odd number of hashes, it appends a zero hash
struct HPairIter(Vec<Hash>); struct HPairIter(Vec<Hash>);
impl Iterator for HPairIter { impl Iterator for HPairIter {
type Item = HPair; type Item = HPair;
fn next(&mut self) -> Option<HPair> { fn next(&mut self) -> Option<HPair> {
self.0.pop().map(|first| HPair(first, self.0.pop().unwrap_or(first))) self.0.pop().map(|first| HPair(first, self.0.pop().unwrap_or(ZERO_HASH)))
} }
} }
/// A row in a Merkle tree. Can be built from a vector of hashes. Calculates /// A row in a Merkle tree. Can be built from a vector of hashes. Calculates