From 964c26eb326dc26c032a3ccba10cb6d376bb3cf4 Mon Sep 17 00:00:00 2001 From: Dimitri Staessens Date: Sun, 26 Apr 2026 07:38:43 +0200 Subject: lib: Add CRC-8 and CRC-16 checksums These checksum will be handy for header checksums. Signed-off-by: Dimitri Staessens Signed-off-by: Sander Vrijders --- src/lib/hash.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/lib/hash.c') diff --git a/src/lib/hash.c b/src/lib/hash.c index f32001d9..7ffa5bc1 100644 --- a/src/lib/hash.c +++ b/src/lib/hash.c @@ -39,6 +39,8 @@ #include #include #endif +#include +#include #include #include #include @@ -70,6 +72,10 @@ int hash_len_tbl [] = { uint16_t hash_len(enum hash_algo algo) { + if (algo == HASH_CRC8) + return CRC8_HASH_LEN; + if (algo == HASH_CRC16) + return CRC16_HASH_LEN; if (algo == HASH_CRC64) return CRC64_HASH_LEN; #ifdef HAVE_LIBGCRYPT @@ -84,6 +90,20 @@ void mem_hash(enum hash_algo algo, const uint8_t * buf, size_t len) { + if (algo == HASH_CRC8) { + uint8_t crc = 0; + + crc8_autosar(&crc, buf, len); + *(uint8_t *) dst = crc; + return; + } + if (algo == HASH_CRC16) { + uint16_t crc = 0; + + crc16_ccitt_false(&crc, buf, len); + *(uint16_t *) dst = htobe16(crc); + return; + } if (algo == HASH_CRC64) { uint64_t crc = 0; -- cgit v1.2.3