diff --git a/Chaos/Hash/Hash.hpp b/Chaos/Hash/Hash.hpp index fe252e1..af87c44 100644 --- a/Chaos/Hash/Hash.hpp +++ b/Chaos/Hash/Hash.hpp @@ -1,38 +1,17 @@ #ifndef CHAOS_HASH_HASH_HPP #define CHAOS_HASH_HASH_HPP +#include #include namespace Chaos::Hash { template -class Hash +concept Hash = requires(T hash) { -public: - auto GetRawDigest() const - { - return Impl().GetRawDigest(); - } - - std::string ToHexString() const - { - return Impl().ToHexString(); - } - -protected: - Hash() = default; - -private: - const T & Impl() const - { - return static_cast(*this); - } - - T & Impl() - { - return static_cast(*this); - } + hash.GetRawDigest(); + { hash.ToHexString() } -> std::same_as; }; } // namespace Chaos::Hash diff --git a/Chaos/Hash/Md4.hpp b/Chaos/Hash/Md4.hpp index 103bd3e..d6528d5 100644 --- a/Chaos/Hash/Md4.hpp +++ b/Chaos/Hash/Md4.hpp @@ -136,7 +136,7 @@ private: namespace Chaos::Hash::Md4 { -struct Md4Hash : public Hash +struct Md4Hash { std::array GetRawDigest() const { @@ -161,6 +161,8 @@ struct Md4Hash : public Hash std::array RawDigest_; }; +static_assert(Hash); + class Md4Hasher : public Hasher { public: diff --git a/Chaos/Hash/Md5.hpp b/Chaos/Hash/Md5.hpp index 7e6c97a..ecdb288 100644 --- a/Chaos/Hash/Md5.hpp +++ b/Chaos/Hash/Md5.hpp @@ -160,7 +160,7 @@ private: namespace Chaos::Hash::Md5 { -struct Md5Hash : public Hash +struct Md5Hash { std::array GetRawDigest() const { @@ -185,6 +185,8 @@ struct Md5Hash : public Hash std::array RawDigest_; }; +static_assert(Hash); + class Md5Hasher : public Hasher { public: diff --git a/Chaos/Hash/Sha1.hpp b/Chaos/Hash/Sha1.hpp index 877a0d8..ee99e83 100644 --- a/Chaos/Hash/Sha1.hpp +++ b/Chaos/Hash/Sha1.hpp @@ -129,7 +129,7 @@ private: namespace Chaos::Hash::Sha1 { -struct Sha1Hash : public Hash +struct Sha1Hash { std::array GetRawDigest() const { @@ -155,6 +155,8 @@ struct Sha1Hash : public Hash std::array RawDigest_; }; +static_assert(Hash); + class Sha1Hasher : public Hasher { public: