iPXE
crypto
crc32.c
Go to the documentation of this file.
1
/*
2
* Little-endian CRC32 implementation.
3
*
4
* Copyright (c) 2009 Joshua Oreman <oremanj@rwcr.net>.
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License as
8
* published by the Free Software Foundation; either version 2 of the
9
* License, or any later version.
10
*
11
* This program is distributed in the hope that it will be useful, but
12
* WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19
* 02110-1301, USA.
20
*/
21
22
FILE_LICENCE
( GPL2_OR_LATER );
23
24
#include <
ipxe/crc32.h
>
25
26
#define CRCPOLY 0xedb88320
27
28
/**
29
* Calculate 32-bit little-endian CRC checksum
30
*
31
* @v seed Initial value
32
* @v data Data to checksum
33
* @v len Length of data
34
*
35
* Usually @a seed is initially zero or all one bits, depending on the
36
* protocol. To continue a CRC checksum over multiple calls, pass the
37
* return value from one call as the @a seed parameter to the next.
38
*/
39
u32
crc32_le
(
u32
seed,
const
void
*
data
,
size_t
len
)
40
{
41
u32
crc = seed;
42
const
u8
*
src
=
data
;
43
u32
mult;
44
int
i;
45
46
while
(
len
-- ) {
47
crc ^= *
src
++;
48
for
( i = 0; i < 8; i++ ) {
49
mult = ( crc & 1 ) ?
CRCPOLY
: 0;
50
crc = ( crc >> 1 ) ^ mult;
51
}
52
}
53
54
return
crc;
55
}
src
static const void * src
Definition:
string.h:47
FILE_LICENCE
FILE_LICENCE(GPL2_OR_LATER)
crc32.h
crc32_le
u32 crc32_le(u32 seed, const void *data, size_t len)
Calculate 32-bit little-endian CRC checksum.
Definition:
crc32.c:39
CRCPOLY
#define CRCPOLY
Definition:
crc32.c:26
data
uint8_t data[48]
Additional event data.
Definition:
ena.h:22
len
uint32_t len
Length.
Definition:
ena.h:14
u8
uint8_t u8
Definition:
stdint.h:19
u32
uint32_t u32
Definition:
stdint.h:23
Generated by
1.8.15