Merge pull request #7 from GarrickOllivander/fix_merkle_tree_malleability

Fix Merkle tree malleability.
This commit is contained in:
Ignotus Peverell 2016-10-30 18:18:40 -07:00 committed by GitHub
commit 2efa8ce706

View file

@ -163,13 +163,15 @@ impl Hashed for HPair {
}
}
/// 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
/// See https://bitcointalk.org/index.php?topic=102395.0 CVE-2012-2459 (block merkle calculation exploit)
/// for the argument against duplication of last hash
struct HPairIter(Vec<Hash>);
impl Iterator for HPairIter {
type Item = 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