diff --git a/src/util/hasher.cpp b/src/util/hasher.cpp index 236b8e926f7..5900daf0500 100644 --- a/src/util/hasher.cpp +++ b/src/util/hasher.cpp @@ -10,3 +10,10 @@ SaltedTxidHasher::SaltedTxidHasher() : k0(GetRand(std::numeric_limits::max())), k1(GetRand(std::numeric_limits::max())) {} SaltedOutpointHasher::SaltedOutpointHasher() : k0(GetRand(std::numeric_limits::max())), k1(GetRand(std::numeric_limits::max())) {} + +SaltedSipHasher::SaltedSipHasher() : m_k0(GetRand(std::numeric_limits::max())), m_k1(GetRand(std::numeric_limits::max())) {} + +size_t SaltedSipHasher::operator()(const Span& script) const +{ + return CSipHasher(m_k0, m_k1).Write(script.data(), script.size()).Finalize(); +} diff --git a/src/util/hasher.h b/src/util/hasher.h index 77301df63d5..fa2fea30d82 100644 --- a/src/util/hasher.h +++ b/src/util/hasher.h @@ -84,4 +84,16 @@ struct BlockHasher size_t operator()(const uint256& hash) const { return ReadLE64(hash.begin()); } }; +class SaltedSipHasher +{ +private: + /** Salt */ + const uint64_t m_k0, m_k1; + +public: + SaltedSipHasher(); + + size_t operator()(const Span& script) const; +}; + #endif // BITCOIN_UTIL_HASHER_H