crc.c 497 B

1234567891011121314151617181920
  1. #include <stdint.h>
  2. #include <stddef.h>
  3. /* CRC8 with the specified initialization value 'init' and
  4. * polynomial 'poly'. */
  5. uint8_t crc8(const uint8_t *data, size_t len, uint8_t init, uint8_t poly)
  6. {
  7. uint8_t crc = init;
  8. size_t i, j;
  9. for (i = 0; i < len; i++) {
  10. crc ^= data[i];
  11. for (j = 0; j < 8; j++) {
  12. if ((crc & 0x80) != 0)
  13. crc = (uint8_t)((crc << 1) ^ poly);
  14. else
  15. crc <<= 1;
  16. }
  17. }
  18. return crc;
  19. }