Rework hashes (also fix Fletcher16 and CRC64)

This commit is contained in:
Jérôme Leclercq
2022-02-10 01:46:58 +01:00
parent 52100e3b3b
commit 97ee89afb7
29 changed files with 1262 additions and 1330 deletions

View File

@@ -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;
};
}

View File

@@ -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;

View File

@@ -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;
};
}

View File

@@ -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 */
};
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 */
};
}