// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin // SPDX-License-Identifier: CC-BY-NC-ND-4.0 #pragma once #include "types.h" #include #include #include class SHA256Digest { public: enum : u32 { DIGEST_SIZE = 32, BLOCK_SIZE = 64, }; using Digest = std::array; SHA256Digest(); void Update(const void* data, size_t len); void Update(std::span data); void Final(std::span digest); Digest Final(); void Reset(); static std::string DigestToString(const std::span digest); static Digest GetDigest(const void* data, size_t len); static Digest GetDigest(std::span data); private: void TransformBlock(); u64 m_bit_length = 0; std::array m_state = {}; u32 m_block_length = 0; std::array m_block = {}; };