#pragma once
#include <array>
#include <cstddef>
#include <span>
#include <whiteout/common_types.h>
namespace whiteout::storages::common {
class MD5 {
public:
MD5();
void update(const void* data, size_t length);
void update(std::span<const u8> data) {
update(data.data(), data.size());
}
std::array<u8, 16> finalize();
private:
void processBlock(const u8* block);
u32 m_state[4];
u64 m_totalLen = 0;
u8 m_buffer[64]{};
size_t m_bufferLen = 0;
};
inline std::array<u8, 16> md5Hash(std::span<const u8> data) {
MD5 hasher;
hasher.update(data);
return hasher.finalize();
}
}