Rework hashes (also fix Fletcher16 and CRC64)
This commit is contained in:
@@ -29,7 +29,7 @@ namespace Nz
|
||||
template<typename O, typename F, typename Tuple> decltype(auto) Apply(O& object, F&& fn, Tuple&& t);
|
||||
template<typename T> constexpr std::size_t BitCount();
|
||||
template<typename T> ByteArray ComputeHash(HashType hash, const T& v);
|
||||
template<typename T> ByteArray ComputeHash(AbstractHash* hash, const T& v);
|
||||
template<typename T> ByteArray ComputeHash(AbstractHash& hash, const T& v);
|
||||
template<typename T, std::size_t N> constexpr std::size_t CountOf(T(&name)[N]) noexcept;
|
||||
template<typename T> std::size_t CountOf(const T& c);
|
||||
inline bool HashAppend(AbstractHash* hash, const std::string_view& v);
|
||||
|
||||
@@ -178,7 +178,7 @@ namespace Nz
|
||||
template<typename T>
|
||||
ByteArray ComputeHash(HashType hash, const T& v)
|
||||
{
|
||||
return ComputeHash(AbstractHash::Get(hash).get(), v);
|
||||
return ComputeHash(*AbstractHash::Get(hash), v);
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -195,15 +195,13 @@ namespace Nz
|
||||
* \see ComputeHash
|
||||
*/
|
||||
template<typename T>
|
||||
ByteArray ComputeHash(AbstractHash* hash, const T& v)
|
||||
ByteArray ComputeHash(AbstractHash& hash, const T& v)
|
||||
{
|
||||
NazaraAssert(hash != nullptr, "Invalid abstracthash pointer");
|
||||
|
||||
hash->Begin();
|
||||
hash.Begin();
|
||||
|
||||
HashAppend(hash, v);
|
||||
|
||||
return hash->End();
|
||||
return hash.End();
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -234,9 +232,9 @@ namespace Nz
|
||||
return c.size();
|
||||
}
|
||||
|
||||
inline bool HashAppend(AbstractHash* hash, const std::string_view& v)
|
||||
inline bool HashAppend(AbstractHash& hash, const std::string_view& v)
|
||||
{
|
||||
hash->Append(reinterpret_cast<const UInt8*>(v.data()), v.size());
|
||||
hash.Append(reinterpret_cast<const UInt8*>(v.data()), v.size());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@ namespace Nz
|
||||
Container m_array;
|
||||
};
|
||||
|
||||
inline bool HashAppend(AbstractHash* hash, const ByteArray& byteArray);
|
||||
inline bool HashAppend(AbstractHash& hash, const ByteArray& byteArray);
|
||||
}
|
||||
|
||||
namespace std
|
||||
|
||||
@@ -732,9 +732,9 @@ namespace Nz
|
||||
return m_array >= rhs.m_array;
|
||||
}
|
||||
|
||||
inline bool HashAppend(AbstractHash* hash, const ByteArray& byteArray)
|
||||
inline bool HashAppend(AbstractHash& hash, const ByteArray& byteArray)
|
||||
{
|
||||
hash->Append(byteArray.GetConstBuffer(), byteArray.GetSize());
|
||||
hash.Append(byteArray.GetConstBuffer(), byteArray.GetSize());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ namespace Nz
|
||||
File& operator=(File&& file) noexcept;
|
||||
|
||||
static inline ByteArray ComputeHash(HashType hash, const std::filesystem::path& filePath);
|
||||
static inline ByteArray ComputeHash(AbstractHash* hash, const std::filesystem::path& filePath);
|
||||
static inline ByteArray ComputeHash(AbstractHash& hash, const std::filesystem::path& filePath);
|
||||
|
||||
private:
|
||||
void FlushStream() override;
|
||||
@@ -71,7 +71,7 @@ namespace Nz
|
||||
std::unique_ptr<FileImpl> m_impl;
|
||||
};
|
||||
|
||||
NAZARA_CORE_API bool HashAppend(AbstractHash* hash, const File& originalFile);
|
||||
NAZARA_CORE_API bool HashAppend(AbstractHash& hash, const File& originalFile);
|
||||
}
|
||||
|
||||
#include <Nazara/Core/File.inl>
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace Nz
|
||||
|
||||
inline ByteArray File::ComputeHash(HashType hash, const std::filesystem::path& filePath)
|
||||
{
|
||||
return ComputeHash(AbstractHash::Get(hash).get(), filePath);
|
||||
return ComputeHash(*AbstractHash::Get(hash), filePath);
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -29,7 +29,7 @@ namespace Nz
|
||||
* \param filePath Path for the file
|
||||
*/
|
||||
|
||||
inline ByteArray File::ComputeHash(AbstractHash* hash, const std::filesystem::path& filePath)
|
||||
inline ByteArray File::ComputeHash(AbstractHash& hash, const std::filesystem::path& filePath)
|
||||
{
|
||||
return Nz::ComputeHash(hash, File(filePath));
|
||||
}
|
||||
|
||||
@@ -13,13 +13,11 @@
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
struct HashCRC32_state;
|
||||
|
||||
class NAZARA_CORE_API HashCRC32 : public AbstractHash
|
||||
class NAZARA_CORE_API CRC32Hash final : public AbstractHash
|
||||
{
|
||||
public:
|
||||
HashCRC32(UInt32 polynomial = 0x04c11db7);
|
||||
virtual ~HashCRC32();
|
||||
CRC32Hash(UInt32 polynomial = DefaultPolynomial);
|
||||
virtual ~CRC32Hash();
|
||||
|
||||
void Append(const UInt8* data, std::size_t len) override;
|
||||
void Begin() override;
|
||||
@@ -28,8 +26,11 @@ namespace Nz
|
||||
std::size_t GetDigestLength() const override;
|
||||
const char* GetHashName() const override;
|
||||
|
||||
static constexpr UInt32 DefaultPolynomial = 0x04C11DB7;
|
||||
|
||||
private:
|
||||
HashCRC32_state* m_state;
|
||||
UInt32 m_crc;
|
||||
const UInt32* m_table;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -13,11 +13,11 @@
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
class NAZARA_CORE_API HashCRC64 : public AbstractHash
|
||||
class NAZARA_CORE_API CRC64Hash final : public AbstractHash
|
||||
{
|
||||
public:
|
||||
HashCRC64() = default;
|
||||
~HashCRC64() = default;
|
||||
CRC64Hash() = default;
|
||||
~CRC64Hash() = default;
|
||||
|
||||
void Append(const UInt8* data, std::size_t len) override;
|
||||
void Begin() override;
|
||||
|
||||
@@ -13,13 +13,11 @@
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
struct HashFletcher16_state;
|
||||
|
||||
class NAZARA_CORE_API HashFletcher16 : public AbstractHash
|
||||
class NAZARA_CORE_API Fletcher16Hash final : public AbstractHash
|
||||
{
|
||||
public:
|
||||
HashFletcher16();
|
||||
virtual ~HashFletcher16();
|
||||
Fletcher16Hash() = default;
|
||||
~Fletcher16Hash() = default;
|
||||
|
||||
void Append(const UInt8* data, std::size_t len) override;
|
||||
void Begin() override;
|
||||
@@ -29,7 +27,8 @@ namespace Nz
|
||||
const char* GetHashName() const override;
|
||||
|
||||
private:
|
||||
HashFletcher16_state* m_state;
|
||||
UInt16 m_sum1;
|
||||
UInt16 m_sum2;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -13,13 +13,11 @@
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
struct HashMD5_state;
|
||||
|
||||
class NAZARA_CORE_API HashMD5 : public AbstractHash
|
||||
class NAZARA_CORE_API MD5Hash final : public AbstractHash
|
||||
{
|
||||
public:
|
||||
HashMD5();
|
||||
virtual ~HashMD5();
|
||||
MD5Hash() = default;
|
||||
~MD5Hash() = default;
|
||||
|
||||
void Append(const UInt8* data, std::size_t len) override;
|
||||
void Begin() override;
|
||||
@@ -29,7 +27,11 @@ namespace Nz
|
||||
const char* GetHashName() const override;
|
||||
|
||||
private:
|
||||
HashMD5_state* m_state;
|
||||
void md5_process(const UInt8* data);
|
||||
|
||||
std::size_t m_count[2]; /* message length in bits, lsw first */
|
||||
UInt32 m_abcd[4]; /* digest buffer */
|
||||
UInt8 m_buf[64]; /* accumulate block */
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -15,11 +15,11 @@ namespace Nz
|
||||
{
|
||||
union SHA_CTX;
|
||||
|
||||
class NAZARA_CORE_API HashSHA1 : public AbstractHash
|
||||
class NAZARA_CORE_API SHA1Hash final : public AbstractHash
|
||||
{
|
||||
public:
|
||||
HashSHA1();
|
||||
virtual ~HashSHA1();
|
||||
SHA1Hash();
|
||||
~SHA1Hash();
|
||||
|
||||
void Append(const UInt8* data, std::size_t len) override;
|
||||
void Begin() override;
|
||||
|
||||
@@ -15,11 +15,11 @@ namespace Nz
|
||||
{
|
||||
union SHA_CTX;
|
||||
|
||||
class NAZARA_CORE_API HashSHA224 : public AbstractHash
|
||||
class NAZARA_CORE_API SHA224Hash final : public AbstractHash
|
||||
{
|
||||
public:
|
||||
HashSHA224();
|
||||
virtual ~HashSHA224();
|
||||
SHA224Hash();
|
||||
~SHA224Hash();
|
||||
|
||||
void Append(const UInt8* data, std::size_t len) override;
|
||||
void Begin() override;
|
||||
|
||||
@@ -15,11 +15,11 @@ namespace Nz
|
||||
{
|
||||
union SHA_CTX;
|
||||
|
||||
class NAZARA_CORE_API HashSHA256 : public AbstractHash
|
||||
class NAZARA_CORE_API SHA256Hash final : public AbstractHash
|
||||
{
|
||||
public:
|
||||
HashSHA256();
|
||||
virtual ~HashSHA256();
|
||||
SHA256Hash();
|
||||
~SHA256Hash();
|
||||
|
||||
void Append(const UInt8* data, std::size_t len) override;
|
||||
void Begin() override;
|
||||
|
||||
@@ -15,11 +15,11 @@ namespace Nz
|
||||
{
|
||||
union SHA_CTX;
|
||||
|
||||
class NAZARA_CORE_API HashSHA384 : public AbstractHash
|
||||
class NAZARA_CORE_API SHA384Hash final : public AbstractHash
|
||||
{
|
||||
public:
|
||||
HashSHA384();
|
||||
virtual ~HashSHA384();
|
||||
SHA384Hash();
|
||||
~SHA384Hash();
|
||||
|
||||
void Append(const UInt8* data, std::size_t len) override;
|
||||
void Begin() override;
|
||||
|
||||
@@ -15,11 +15,11 @@ namespace Nz
|
||||
{
|
||||
union SHA_CTX;
|
||||
|
||||
class NAZARA_CORE_API HashSHA512 : public AbstractHash
|
||||
class NAZARA_CORE_API SHA512Hash final : public AbstractHash
|
||||
{
|
||||
public:
|
||||
HashSHA512();
|
||||
virtual ~HashSHA512();
|
||||
SHA512Hash();
|
||||
~SHA512Hash();
|
||||
|
||||
void Append(const UInt8* data, std::size_t len) override;
|
||||
void Begin() override;
|
||||
|
||||
@@ -13,13 +13,11 @@
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
struct HashWhirlpool_state;
|
||||
|
||||
class NAZARA_CORE_API HashWhirlpool : public AbstractHash
|
||||
class NAZARA_CORE_API WhirlpoolHash final : public AbstractHash
|
||||
{
|
||||
public:
|
||||
HashWhirlpool();
|
||||
virtual ~HashWhirlpool();
|
||||
WhirlpoolHash() = default;
|
||||
~WhirlpoolHash() = default;
|
||||
|
||||
void Append(const UInt8* data, std::size_t len) override;
|
||||
void Begin() override;
|
||||
@@ -29,7 +27,13 @@ namespace Nz
|
||||
const char* GetHashName() const override;
|
||||
|
||||
private:
|
||||
HashWhirlpool_state* m_state;
|
||||
void ProcessBuffer();
|
||||
|
||||
std::size_t m_bufferBits; // current number of bits on the buffer */
|
||||
std::size_t m_bufferPos; // current (possibly incomplete) byte slot on the buffer */
|
||||
UInt8 m_bitLength[32]; // global number of hashed bits (256-bit counter) */
|
||||
UInt8 m_buffer[64]; // buffer of data to hash */
|
||||
UInt64 m_hash[8]; // the hashing state */
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user