diff --git a/packages/merkle_tree/src/hashes.cairo b/packages/merkle_tree/src/hashes.cairo index 0ad9921c2..b2834c8bb 100644 --- a/packages/merkle_tree/src/hashes.cairo +++ b/packages/merkle_tree/src/hashes.cairo @@ -5,6 +5,7 @@ use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; use core::poseidon::PoseidonTrait; use core::traits::PartialOrd; +use core::poseidon::hades_permutation; /// Computes a commutative hash of a sorted pair of felt252 values. /// @@ -33,14 +34,15 @@ pub impl PedersenCHasher of CommutativeHasher { /// Computes the Poseidon commutative hash of a sorted pair of felt252 values. pub impl PoseidonCHasher of CommutativeHasher { - /// Computes the Poseidon hash of the concatenation of two values, sorting the pair first. + /// Computes the Poseidon hash by directly using hades_permutation with the two values + /// and a length indicator, sorting the pair first. fn commutative_hash(a: felt252, b: felt252) -> felt252 { - let hash_state = PoseidonTrait::new(); - if a < b { - hash_state.update(a).update(b).finalize() + let (result, _, _) = if a < b { + hades_permutation(a, b, 2) } else { - hash_state.update(b).update(a).finalize() - } + hades_permutation(b, a, 2) + }; + result } }