diff --git a/src/util/sha1/sha1_util.cpp b/src/util/sha1/sha1_util.cpp index 7be5e9ee..eefc9275 100644 --- a/src/util/sha1/sha1_util.cpp +++ b/src/util/sha1/sha1_util.cpp @@ -21,13 +21,26 @@ namespace dxvk { Sha1Hash Sha1Hash::compute( - const uint8_t* data, + const void* data, size_t size) { + Sha1Data chunk = { data, size }; + return compute(1, &chunk); + } + + + Sha1Hash Sha1Hash::compute( + size_t numChunks, + const Sha1Data* chunks) { Sha1Digest digest; SHA1_CTX ctx; SHA1Init(&ctx); - SHA1Update(&ctx, data, size); + + for (size_t i = 0; i < numChunks; i++) { + auto ptr = reinterpret_cast(chunks[i].data); + SHA1Update(&ctx, ptr, chunks[i].size); + } + SHA1Final(digest.data(), &ctx); return Sha1Hash(digest); } diff --git a/src/util/sha1/sha1_util.h b/src/util/sha1/sha1_util.h index ae09323b..a9c85fa4 100644 --- a/src/util/sha1/sha1_util.h +++ b/src/util/sha1/sha1_util.h @@ -7,6 +7,11 @@ namespace dxvk { using Sha1Digest = std::array; + + struct Sha1Data { + const void* data; + size_t size; + }; class Sha1Hash { @@ -33,16 +38,18 @@ namespace dxvk { } static Sha1Hash compute( - const uint8_t* data, + const void* data, size_t size); + static Sha1Hash compute( + size_t numChunks, + const Sha1Data* chunks); + template static Sha1Hash compute(const T& data) { - auto bytes = reinterpret_cast(&data); - return compute(bytes, sizeof(T)); + return compute(&data, sizeof(T)); } - private: Sha1Digest m_digest;