1 /* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2  * Use of this source code is governed by a BSD-style license that can be
3  * found in the LICENSE file.
4  */
5 
6 #include "sysincludes.h"
7 
8 #include "crc8.h"
9 
10 /**
11  * Return CRC-8 of the data, using x^8 + x^2 + x + 1 polynomial.  A table-based
12  * algorithm would be faster, but for only a few bytes it isn't worth the code
13  * size. */
Crc8(const void * vptr,int len)14 uint8_t Crc8(const void *vptr, int len)
15 {
16 	const uint8_t *data = vptr;
17 	unsigned crc = 0;
18 	int i, j;
19 
20 	for (j = len; j; j--, data++) {
21 		crc ^= (*data << 8);
22 		for(i = 8; i; i--) {
23 			if (crc & 0x8000)
24 				crc ^= (0x1070 << 3);
25 			crc <<= 1;
26 		}
27 	}
28 
29 	return (uint8_t)(crc >> 8);
30 }
31