aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-05-24 14:24:50 +0200
committerStefan Boberg <[email protected]>2021-05-24 14:24:50 +0200
commit84ce8f67868a7964f9f8fa8528f9f35f19afdb7e (patch)
treed944627d8ac856a7aec52039a9e147f697e6bd6c
parentInitial implementation of CompositeBuffer (diff)
downloadzen-84ce8f67868a7964f9f8fa8528f9f35f19afdb7e.tar.xz
zen-84ce8f67868a7964f9f8fa8528f9f35f19afdb7e.zip
Added BLAKE3::HashBuffer for hashing composite buffers
-rw-r--r--zencore/blake3.cpp21
-rw-r--r--zencore/include/zencore/blake3.h12
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];