7#include <aws/core/utils/Outcome.h>
8#include <aws/core/utils/crypto/Hash.h>
9#include <aws/core/utils/logging/LogMacros.h>
16 static_assert(std::is_integral<HashT>::value,
17 "Must use integral type to convert to buffer");
19 for (
size_t i = 0; i <
sizeof(HashT); ++i) {
20 size_t shiftSize = (
sizeof(HashT) - 1) * 8 - i * 8;
21 buffer[i] = (value >> shiftSize) & 0xFF;
26template <
typename RunningChecksumT,
27 RunningChecksumT (*CRTChecksumFuncT)(Crt::ByteCursor,
29 ByteBuffer (*ByteBufferFuncT)(RunningChecksumT)>
37 Aws::Crt::ByteCursor byteCursor = Aws::Crt::ByteCursorFromArray(
38 reinterpret_cast<const uint8_t *
>(str.data()), str.size());
39 m_runningChecksum = CRTChecksumFuncT(byteCursor, m_runningChecksum);
40 return ByteBufferFuncT(m_runningChecksum);
44 auto currentPos = stream.tellg();
50 stream.seekg(0, Aws::IStream::beg);
54 while (stream.good()) {
55 stream.read(
reinterpret_cast<char *
>(streamBuffer),
57 const auto bytesRead =
static_cast<size_t>(stream.gcount());
60 Aws::Crt::ByteCursor byteCursor =
61 Aws::Crt::ByteCursorFromArray(streamBuffer, bytesRead);
62 m_runningChecksum = CRTChecksumFuncT(byteCursor, m_runningChecksum);
69 "Stream encountered an error while calculating CRC Checksum");
73 stream.seekg(currentPos, Aws::IStream::beg);
75 return ByteBufferFuncT(m_runningChecksum);
78 void Update(
unsigned char *buffer,
size_t bufferSize)
override {
79 Aws::Crt::ByteCursor byteCursor =
80 Aws::Crt::ByteCursorFromArray(buffer, bufferSize);
81 m_runningChecksum = CRTChecksumFuncT(byteCursor, m_runningChecksum);
87 RunningChecksumT m_runningChecksum;
HashResult GetHash() override
HashResult Calculate(Aws::IStream &stream) override
~CRCChecksum() override=default
HashResult Calculate(const Aws::String &str) override
void Update(unsigned char *buffer, size_t bufferSize) override
static const uint32_t INTERNAL_HASH_STREAM_BUFFER_SIZE
ByteBuffer ConvertToBuffer(HashT value)
std::basic_istream< char, std::char_traits< char > > IStream
std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > > String