diff --git a/include/nuttx/crc32.h b/include/nuttx/crc32.h index 516f860cda6..82e781f1569 100644 --- a/include/nuttx/crc32.h +++ b/include/nuttx/crc32.h @@ -116,6 +116,30 @@ uint32_t crc32hf4acfb13_part(FAR const uint8_t *src, uint32_t crc32hf4acfb13(FAR const uint8_t *src, size_t len); +/**************************************************************************** + * Name: crc32_ieeepart + * + * Description: + * Continue IEEE CRC32 calculation on a part of the buffer. + * Compatible with Linux/zlib crc32(). Uses init value 0xFFFFFFFF and + * final XOR with 0xFFFFFFFF. + * + ****************************************************************************/ + +uint32_t crc32_ieeepart(FAR const uint8_t *src, + size_t len, uint32_t crc32val); + +/**************************************************************************** + * Name: crc32_ieee + * + * Description: + * Return an IEEE-standard 32-bit CRC compatible with Linux/zlib crc32(). + * Uses init value 0xFFFFFFFF and final XOR with 0xFFFFFFFF. + * + ****************************************************************************/ + +uint32_t crc32_ieee(FAR const uint8_t *src, size_t len); + #undef EXTERN #ifdef __cplusplus } diff --git a/libs/libc/misc/lib_crc32.c b/libs/libc/misc/lib_crc32.c index 15bcc170ccc..e76065d2c02 100644 --- a/libs/libc/misc/lib_crc32.c +++ b/libs/libc/misc/lib_crc32.c @@ -180,3 +180,33 @@ uint32_t crc32(FAR const uint8_t *src, size_t len) { return crc32part(src, len, 0); } + +/**************************************************************************** + * Name: crc32_ieeepart + * + * Description: + * Continue IEEE CRC32 calculation on a part of the buffer. + * Compatible with Linux/zlib crc32(). Uses init value 0xFFFFFFFF and + * final XOR with 0xFFFFFFFF. + * + ****************************************************************************/ + +uint32_t crc32_ieeepart(FAR const uint8_t *src, + size_t len, uint32_t crc32val) +{ + return crc32part(src, len, crc32val ^ 0xffffffff) ^ 0xffffffff; +} + +/**************************************************************************** + * Name: crc32_ieee + * + * Description: + * Return an IEEE-standard 32-bit CRC compatible with Linux/zlib crc32(). + * Uses init value 0xFFFFFFFF and final XOR with 0xFFFFFFFF. + * + ****************************************************************************/ + +uint32_t crc32_ieee(FAR const uint8_t *src, size_t len) +{ + return crc32_ieeepart(src, len, 0); +}