diff --git a/crt/aws-checksums b/crt/aws-checksums index 9978ba2c3..270b15acc 160000 --- a/crt/aws-checksums +++ b/crt/aws-checksums @@ -1 +1 @@ -Subproject commit 9978ba2c33a7a259c1a6bd0f62abe26827d03b85 +Subproject commit 270b15acc1b2125340ec1c6dda6cc3c28ef0fa44 diff --git a/include/aws/crt/checksum/CRC.h b/include/aws/crt/checksum/CRC.h index 023d1d21a..e59b4d506 100644 --- a/include/aws/crt/checksum/CRC.h +++ b/include/aws/crt/checksum/CRC.h @@ -34,6 +34,21 @@ namespace Aws * the non bit-reflected polynomial 0xad93d23594c93659) and inverts the CRC input and output bits. */ uint64_t AWS_CRT_CPP_API ComputeCRC64NVME(ByteCursor input, uint64_t previousCRC64NVME = 0) noexcept; + + /** + * Combines two CRC32 (Ethernet, gzip) checksums computed over separate data blocks. + */ + uint32_t AWS_CRT_CPP_API CombineCRC32(uint32_t crc1, uint32_t crc2, uint64_t len2) noexcept; + + /** + * Combines two CRC32C (Castagnoli, iSCSI) checksums computed over separate data blocks. + */ + uint32_t AWS_CRT_CPP_API CombineCRC32C(uint32_t crc1, uint32_t crc2, uint64_t len2) noexcept; + + /** + * Combines two CRC64-NVME checksums computed over separate data blocks. + */ + uint64_t AWS_CRT_CPP_API CombineCRC64NVME(uint64_t crc1, uint64_t crc2, uint64_t len2) noexcept; } // namespace Checksum } // namespace Crt } // namespace Aws diff --git a/source/checksum/CRC.cpp b/source/checksum/CRC.cpp index 65ed70e28..5ff65b251 100644 --- a/source/checksum/CRC.cpp +++ b/source/checksum/CRC.cpp @@ -27,6 +27,21 @@ namespace Aws return aws_checksums_crc64nvme_ex(input.ptr, input.len, previousCRC64NVME); } + uint32_t CombineCRC32(uint32_t crc1, uint32_t crc2, uint64_t len2) noexcept + { + return aws_checksums_crc32_combine(crc1, crc2, len2); + } + + uint32_t CombineCRC32C(uint32_t crc1, uint32_t crc2, uint64_t len2) noexcept + { + return aws_checksums_crc32c_combine(crc1, crc2, len2); + } + + uint64_t CombineCRC64NVME(uint64_t crc1, uint64_t crc2, uint64_t len2) noexcept + { + return aws_checksums_crc64nvme_combine(crc1, crc2, len2); + } + } // namespace Checksum } // namespace Crt } // namespace Aws