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