mirror of
https://github.com/mimblewimble/grin.git
synced 2025-01-20 19:11:08 +03:00
Merge pull request #7 from GarrickOllivander/fix_merkle_tree_malleability
Fix Merkle tree malleability.
This commit is contained in:
commit
2efa8ce706
1 changed files with 4 additions and 2 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue