|  | /* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  | #include <crypto/2sysincludes.h> | 
|  | #include <crypto/2crc8.h> | 
|  |  | 
|  | uint8_t vb2_crc8(const void *vptr, uint32_t size) | 
|  | { | 
|  | const uint8_t *data = vptr; | 
|  | unsigned crc = 0; | 
|  | uint32_t i, j; | 
|  |  | 
|  | /* | 
|  | * Calculate CRC-8 directly.  A table-based algorithm would be faster, | 
|  | * but for only a few bytes it isn't worth the code size. | 
|  | */ | 
|  | for (j = size; j; j--, data++) { | 
|  | crc ^= (*data << 8); | 
|  | for(i = 8; i; i--) { | 
|  | if (crc & 0x8000) | 
|  | crc ^= (0x1070 << 3); | 
|  | crc <<= 1; | 
|  | } | 
|  | } | 
|  |  | 
|  | return (uint8_t)(crc >> 8); | 
|  | } |