xref: /aosp_15_r20/external/vboot_reference/tests/crc32_test.c (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2010 The ChromiumOS Authors
2*8617a60dSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
3*8617a60dSAndroid Build Coastguard Worker  * found in the LICENSE file.
4*8617a60dSAndroid Build Coastguard Worker  */
5*8617a60dSAndroid Build Coastguard Worker 
6*8617a60dSAndroid Build Coastguard Worker #include "cgptlib_test.h"
7*8617a60dSAndroid Build Coastguard Worker #include "common/tests.h"
8*8617a60dSAndroid Build Coastguard Worker #include "crc32.h"
9*8617a60dSAndroid Build Coastguard Worker #include "crc32_test.h"
10*8617a60dSAndroid Build Coastguard Worker 
11*8617a60dSAndroid Build Coastguard Worker #define MAX_VECTOR_LEN 256
12*8617a60dSAndroid Build Coastguard Worker 
TestCrc32TestVectors(void)13*8617a60dSAndroid Build Coastguard Worker int TestCrc32TestVectors(void) {
14*8617a60dSAndroid Build Coastguard Worker 	struct {
15*8617a60dSAndroid Build Coastguard Worker 		uint8_t vector[MAX_VECTOR_LEN];
16*8617a60dSAndroid Build Coastguard Worker 		int len;
17*8617a60dSAndroid Build Coastguard Worker 		uint32_t crc32;
18*8617a60dSAndroid Build Coastguard Worker 	} cases[] = {
19*8617a60dSAndroid Build Coastguard Worker 		{{0x00}, 1, 0xD202EF8D},
20*8617a60dSAndroid Build Coastguard Worker 		{{0x00, 0x00, 0x00, 0x00}, 4, 0x2144DF1C},
21*8617a60dSAndroid Build Coastguard Worker 		{{0x01, 0x01, 0x01, 0x01}, 4, 0xF626D399},
22*8617a60dSAndroid Build Coastguard Worker 		{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
23*8617a60dSAndroid Build Coastguard Worker 		  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
24*8617a60dSAndroid Build Coastguard Worker 		  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
25*8617a60dSAndroid Build Coastguard Worker 		  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
26*8617a60dSAndroid Build Coastguard Worker 		  0x00,0x00,0x00,0x28,0x86,0x4d,0x7f,0x99}, 48, 0x923D6EFD},
27*8617a60dSAndroid Build Coastguard Worker 		{{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
28*8617a60dSAndroid Build Coastguard Worker 		  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
29*8617a60dSAndroid Build Coastguard Worker 		  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
30*8617a60dSAndroid Build Coastguard Worker 		  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
31*8617a60dSAndroid Build Coastguard Worker 		  0x00,0x00,0x00,0x28,0xc5,0x5e,0x45,0x7a}, 48, 0x49A04D82},
32*8617a60dSAndroid Build Coastguard Worker 		{{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,
33*8617a60dSAndroid Build Coastguard Worker 		  0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,
34*8617a60dSAndroid Build Coastguard Worker 		  0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,
35*8617a60dSAndroid Build Coastguard Worker 		  0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
36*8617a60dSAndroid Build Coastguard Worker 		  0x00,0x00,0x00,0x28,0xbf,0x67,0x1e,0xd0}, 48, 0x688B3BFA},
37*8617a60dSAndroid Build Coastguard Worker 	};
38*8617a60dSAndroid Build Coastguard Worker 	int i;
39*8617a60dSAndroid Build Coastguard Worker 
40*8617a60dSAndroid Build Coastguard Worker 	for (i = 0; i < ARRAY_SIZE(cases); ++i) {
41*8617a60dSAndroid Build Coastguard Worker 		uint32_t crc32;
42*8617a60dSAndroid Build Coastguard Worker 
43*8617a60dSAndroid Build Coastguard Worker 		crc32 = Crc32(cases[i].vector, cases[i].len);
44*8617a60dSAndroid Build Coastguard Worker 		EXPECT(crc32 == cases[i].crc32);
45*8617a60dSAndroid Build Coastguard Worker 	}
46*8617a60dSAndroid Build Coastguard Worker 	return TEST_OK;
47*8617a60dSAndroid Build Coastguard Worker }
48