§ Coverage
1/*2 * sc_crc.c -- implementation. Blocks are tagged with the low-level3 * requirement they satisfy; see requirements/sc_crc.md.4 */5#include "sc_crc.h"677uint8_t sc_crc8_smbus(const uint8_t *data, uint32_t len)8{97 uint8_t crc = 0x00u;10 uint32_t i;11 uint8_t bit;12137 if (data == NULL)condition outcomes covered 2/214 {152 len = 0u; /* LLR-CRC-7 */16 }171827 for (i = 0u; i < len; i++) /* LLR-CRC-1 */condition outcomes covered 2/219 {2020 crc ^= data[i];21180 for (bit = 0u; bit < 8u; bit++) /* LLR-CRC-2 */condition outcomes covered 2/222 {23160 if ((crc & 0x80u) != 0u) /* LLR-CRC-3 */condition outcomes covered 2/224 {2585 crc = (uint8_t)((uint8_t)(crc << 1) ^ 0x07u);26 }27 else28 {2975 crc = (uint8_t)(crc << 1);30 }31 }32 }33347 return crc; /* LLR-CRC-4 */35}36374uint16_t sc_crc16_ccitt_false(const uint8_t *data, uint32_t len)38{394 uint16_t crc = 0xFFFFu;40 uint32_t i;41 uint8_t bit;42434 if (data == NULL)condition outcomes covered 2/244 {451 len = 0u; /* LLR-CRC-7 */46 }474822 for (i = 0u; i < len; i++) /* LLR-CRC-1 */condition outcomes covered 2/249 {5018 crc ^= (uint16_t)((uint16_t)data[i] << 8);51162 for (bit = 0u; bit < 8u; bit++) /* LLR-CRC-2 */condition outcomes covered 2/252 {53144 if ((crc & 0x8000u) != 0u) /* LLR-CRC-3 */condition outcomes covered 2/254 {5566 crc = (uint16_t)((uint16_t)(crc << 1) ^ 0x1021u);56 }57 else58 {5978 crc = (uint16_t)(crc << 1);60 }61 }62 }63644 return crc; /* LLR-CRC-5 */65}66675uint32_t sc_crc32(const uint8_t *data, uint32_t len)68{695 uint32_t crc = 0xFFFFFFFFu;70 uint32_t i;71 uint8_t bit;72735 if (data == NULL)condition outcomes covered 2/274 {751 len = 0u; /* LLR-CRC-7 */76 }777824 for (i = 0u; i < len; i++) /* LLR-CRC-1 */condition outcomes covered 2/279 {8019 crc ^= (uint32_t)data[i];81171 for (bit = 0u; bit < 8u; bit++) /* LLR-CRC-2 */condition outcomes covered 2/282 {83152 if ((crc & 0x00000001u) != 0u) /* LLR-CRC-6: reflected */condition outcomes covered 2/284 {8568 crc = (crc >> 1) ^ 0xEDB88320u;86 }87 else88 {8984 crc = (crc >> 1);90 }91 }92 }93945 return crc ^ 0xFFFFFFFFu; /* LLR-CRC-8: final XOR */95}