]> git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/C/Common/Crc32.c
BaseTools: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / BaseTools / Source / C / Common / Crc32.c
1 /** @file
2 CalculateCrc32 routine.
3
4 Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7 **/
8
9 #include <stdlib.h>
10 #include "Crc32.h"
11
12 UINT32 mCrcTable[256] = {
13 0x00000000,
14 0x77073096,
15 0xEE0E612C,
16 0x990951BA,
17 0x076DC419,
18 0x706AF48F,
19 0xE963A535,
20 0x9E6495A3,
21 0x0EDB8832,
22 0x79DCB8A4,
23 0xE0D5E91E,
24 0x97D2D988,
25 0x09B64C2B,
26 0x7EB17CBD,
27 0xE7B82D07,
28 0x90BF1D91,
29 0x1DB71064,
30 0x6AB020F2,
31 0xF3B97148,
32 0x84BE41DE,
33 0x1ADAD47D,
34 0x6DDDE4EB,
35 0xF4D4B551,
36 0x83D385C7,
37 0x136C9856,
38 0x646BA8C0,
39 0xFD62F97A,
40 0x8A65C9EC,
41 0x14015C4F,
42 0x63066CD9,
43 0xFA0F3D63,
44 0x8D080DF5,
45 0x3B6E20C8,
46 0x4C69105E,
47 0xD56041E4,
48 0xA2677172,
49 0x3C03E4D1,
50 0x4B04D447,
51 0xD20D85FD,
52 0xA50AB56B,
53 0x35B5A8FA,
54 0x42B2986C,
55 0xDBBBC9D6,
56 0xACBCF940,
57 0x32D86CE3,
58 0x45DF5C75,
59 0xDCD60DCF,
60 0xABD13D59,
61 0x26D930AC,
62 0x51DE003A,
63 0xC8D75180,
64 0xBFD06116,
65 0x21B4F4B5,
66 0x56B3C423,
67 0xCFBA9599,
68 0xB8BDA50F,
69 0x2802B89E,
70 0x5F058808,
71 0xC60CD9B2,
72 0xB10BE924,
73 0x2F6F7C87,
74 0x58684C11,
75 0xC1611DAB,
76 0xB6662D3D,
77 0x76DC4190,
78 0x01DB7106,
79 0x98D220BC,
80 0xEFD5102A,
81 0x71B18589,
82 0x06B6B51F,
83 0x9FBFE4A5,
84 0xE8B8D433,
85 0x7807C9A2,
86 0x0F00F934,
87 0x9609A88E,
88 0xE10E9818,
89 0x7F6A0DBB,
90 0x086D3D2D,
91 0x91646C97,
92 0xE6635C01,
93 0x6B6B51F4,
94 0x1C6C6162,
95 0x856530D8,
96 0xF262004E,
97 0x6C0695ED,
98 0x1B01A57B,
99 0x8208F4C1,
100 0xF50FC457,
101 0x65B0D9C6,
102 0x12B7E950,
103 0x8BBEB8EA,
104 0xFCB9887C,
105 0x62DD1DDF,
106 0x15DA2D49,
107 0x8CD37CF3,
108 0xFBD44C65,
109 0x4DB26158,
110 0x3AB551CE,
111 0xA3BC0074,
112 0xD4BB30E2,
113 0x4ADFA541,
114 0x3DD895D7,
115 0xA4D1C46D,
116 0xD3D6F4FB,
117 0x4369E96A,
118 0x346ED9FC,
119 0xAD678846,
120 0xDA60B8D0,
121 0x44042D73,
122 0x33031DE5,
123 0xAA0A4C5F,
124 0xDD0D7CC9,
125 0x5005713C,
126 0x270241AA,
127 0xBE0B1010,
128 0xC90C2086,
129 0x5768B525,
130 0x206F85B3,
131 0xB966D409,
132 0xCE61E49F,
133 0x5EDEF90E,
134 0x29D9C998,
135 0xB0D09822,
136 0xC7D7A8B4,
137 0x59B33D17,
138 0x2EB40D81,
139 0xB7BD5C3B,
140 0xC0BA6CAD,
141 0xEDB88320,
142 0x9ABFB3B6,
143 0x03B6E20C,
144 0x74B1D29A,
145 0xEAD54739,
146 0x9DD277AF,
147 0x04DB2615,
148 0x73DC1683,
149 0xE3630B12,
150 0x94643B84,
151 0x0D6D6A3E,
152 0x7A6A5AA8,
153 0xE40ECF0B,
154 0x9309FF9D,
155 0x0A00AE27,
156 0x7D079EB1,
157 0xF00F9344,
158 0x8708A3D2,
159 0x1E01F268,
160 0x6906C2FE,
161 0xF762575D,
162 0x806567CB,
163 0x196C3671,
164 0x6E6B06E7,
165 0xFED41B76,
166 0x89D32BE0,
167 0x10DA7A5A,
168 0x67DD4ACC,
169 0xF9B9DF6F,
170 0x8EBEEFF9,
171 0x17B7BE43,
172 0x60B08ED5,
173 0xD6D6A3E8,
174 0xA1D1937E,
175 0x38D8C2C4,
176 0x4FDFF252,
177 0xD1BB67F1,
178 0xA6BC5767,
179 0x3FB506DD,
180 0x48B2364B,
181 0xD80D2BDA,
182 0xAF0A1B4C,
183 0x36034AF6,
184 0x41047A60,
185 0xDF60EFC3,
186 0xA867DF55,
187 0x316E8EEF,
188 0x4669BE79,
189 0xCB61B38C,
190 0xBC66831A,
191 0x256FD2A0,
192 0x5268E236,
193 0xCC0C7795,
194 0xBB0B4703,
195 0x220216B9,
196 0x5505262F,
197 0xC5BA3BBE,
198 0xB2BD0B28,
199 0x2BB45A92,
200 0x5CB36A04,
201 0xC2D7FFA7,
202 0xB5D0CF31,
203 0x2CD99E8B,
204 0x5BDEAE1D,
205 0x9B64C2B0,
206 0xEC63F226,
207 0x756AA39C,
208 0x026D930A,
209 0x9C0906A9,
210 0xEB0E363F,
211 0x72076785,
212 0x05005713,
213 0x95BF4A82,
214 0xE2B87A14,
215 0x7BB12BAE,
216 0x0CB61B38,
217 0x92D28E9B,
218 0xE5D5BE0D,
219 0x7CDCEFB7,
220 0x0BDBDF21,
221 0x86D3D2D4,
222 0xF1D4E242,
223 0x68DDB3F8,
224 0x1FDA836E,
225 0x81BE16CD,
226 0xF6B9265B,
227 0x6FB077E1,
228 0x18B74777,
229 0x88085AE6,
230 0xFF0F6A70,
231 0x66063BCA,
232 0x11010B5C,
233 0x8F659EFF,
234 0xF862AE69,
235 0x616BFFD3,
236 0x166CCF45,
237 0xA00AE278,
238 0xD70DD2EE,
239 0x4E048354,
240 0x3903B3C2,
241 0xA7672661,
242 0xD06016F7,
243 0x4969474D,
244 0x3E6E77DB,
245 0xAED16A4A,
246 0xD9D65ADC,
247 0x40DF0B66,
248 0x37D83BF0,
249 0xA9BCAE53,
250 0xDEBB9EC5,
251 0x47B2CF7F,
252 0x30B5FFE9,
253 0xBDBDF21C,
254 0xCABAC28A,
255 0x53B39330,
256 0x24B4A3A6,
257 0xBAD03605,
258 0xCDD70693,
259 0x54DE5729,
260 0x23D967BF,
261 0xB3667A2E,
262 0xC4614AB8,
263 0x5D681B02,
264 0x2A6F2B94,
265 0xB40BBE37,
266 0xC30C8EA1,
267 0x5A05DF1B,
268 0x2D02EF8D
269 };
270
271 EFI_STATUS
272 CalculateCrc32 (
273 IN UINT8 *Data,
274 IN UINTN DataSize,
275 IN OUT UINT32 *CrcOut
276 )
277 /*++
278
279 Routine Description:
280
281 The CalculateCrc32 routine.
282
283 Arguments:
284
285 Data - The buffer containing the data to be processed
286 DataSize - The size of data to be processed
287 CrcOut - A pointer to the caller allocated UINT32 that on
288 contains the CRC32 checksum of Data
289
290 Returns:
291
292 EFI_SUCCESS - Calculation is successful.
293 EFI_INVALID_PARAMETER - Data / CrcOut = NULL, or DataSize = 0
294
295 --*/
296 {
297 UINT32 Crc;
298 UINTN Index;
299 UINT8 *Ptr;
300
301 if ((DataSize == 0) || (Data == NULL) || (CrcOut == NULL)) {
302 return EFI_INVALID_PARAMETER;
303 }
304
305 Crc = 0xffffffff;
306 for (Index = 0, Ptr = Data; Index < DataSize; Index++, Ptr++) {
307 Crc = (Crc >> 8) ^ mCrcTable[(UINT8) Crc ^ *Ptr];
308 }
309
310 *CrcOut = Crc ^ 0xffffffff;
311
312 return EFI_SUCCESS;
313 }