/* Copyright (C) 2022-2023 Salvatore Sanfilippo -- All Rights Reserved * See the LICENSE file for information about the license. */ #include <stdint.h> #include <stddef.h> /* CRC8 with the specified initialization value 'init' and * polynomial 'poly'. */ uint8_t crc8(const uint8_t* data, size_t len, uint8_t init, uint8_t poly) { uint8_t crc = init; size_t i, j; for(i = 0; i < len; i++) { crc ^= data[i]; for(j = 0; j < 8; j++) { if((crc & 0x80) != 0) crc = (uint8_t)((crc << 1) ^ poly); else crc <<= 1; } } return crc; } /* Sum all the specified bytes modulo 256. * Initialize the sum with 'init' (usually 0). */ uint8_t sum_bytes(const uint8_t* data, size_t len, uint8_t init) { for(size_t i = 0; i < len; i++) init += data[i]; return init; } /* Perform the bitwise xor of all the specified bytes. * Initialize xor value with 'init' (usually 0). */ uint8_t xor_bytes(const uint8_t* data, size_t len, uint8_t init) { for(size_t i = 0; i < len; i++) init ^= data[i]; return init; }