diff options
| author | Stefan Boberg <[email protected]> | 2021-05-24 14:24:50 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-05-24 14:24:50 +0200 |
| commit | 84ce8f67868a7964f9f8fa8528f9f35f19afdb7e (patch) | |
| tree | d944627d8ac856a7aec52039a9e147f697e6bd6c | |
| parent | Initial implementation of CompositeBuffer (diff) | |
| download | zen-84ce8f67868a7964f9f8fa8528f9f35f19afdb7e.tar.xz zen-84ce8f67868a7964f9f8fa8528f9f35f19afdb7e.zip | |
Added BLAKE3::HashBuffer for hashing composite buffers
| -rw-r--r-- | zencore/blake3.cpp | 21 | ||||
| -rw-r--r-- | zencore/include/zencore/blake3.h | 12 |
2 files changed, 27 insertions, 6 deletions
diff --git a/zencore/blake3.cpp b/zencore/blake3.cpp index ec5d496d5..d8e0596d5 100644 --- a/zencore/blake3.cpp +++ b/zencore/blake3.cpp @@ -4,8 +4,9 @@ #include <zencore/string.h> #include <zencore/zencore.h> -#include "../3rdparty/BLAKE3/c/blake3.h" +#include <zencore/compositebuffer.h> +#include "../3rdparty/BLAKE3/c/blake3.h" #pragma comment(lib, "blake3.lib") #include <doctest/doctest.h> @@ -35,6 +36,24 @@ BLAKE3::HashMemory(const void* data, size_t byteCount) return b3; } +BLAKE3 +BLAKE3::HashBuffer(const CompositeBuffer& Buffer) +{ + BLAKE3 Hash; + + blake3_hasher Hasher; + blake3_hasher_init(&Hasher); + + for (const SharedBuffer& Segment : Buffer.GetSegments()) + { + blake3_hasher_update(&Hasher, Segment.GetData(), Segment.GetSize()); + } + + blake3_hasher_finalize(&Hasher, Hash.Hash, sizeof Hash.Hash); + + return Hash; +} + BLAKE3 BLAKE3::FromHexString(const char* string) { diff --git a/zencore/include/zencore/blake3.h b/zencore/include/zencore/blake3.h index 1ef921c30..bf4adb811 100644 --- a/zencore/include/zencore/blake3.h +++ b/zencore/include/zencore/blake3.h @@ -8,6 +8,7 @@ namespace zen { +class CompositeBuffer; class StringBuilderBase; /** @@ -17,12 +18,13 @@ struct BLAKE3 { uint8_t Hash[32]; - inline auto operator<=>(const BLAKE3& rhs) const = default; + inline auto operator<=>(const BLAKE3& Rhs) const = default; - static BLAKE3 HashMemory(const void* data, size_t byteCount); - static BLAKE3 FromHexString(const char* string); - const char* ToHexString(char* outString /* 40 characters + NUL terminator */) const; - StringBuilderBase& ToHexString(StringBuilderBase& outBuilder) const; + static BLAKE3 HashBuffer(const CompositeBuffer& Buffer); + static BLAKE3 HashMemory(const void* Data, size_t ByteCount); + static BLAKE3 FromHexString(const char* String); + const char* ToHexString(char* OutString /* 40 characters + NUL terminator */) const; + StringBuilderBase& ToHexString(StringBuilderBase& OutBuilder) const; static const int StringLength = 64; typedef char String_t[StringLength + 1]; |