dev
dart 296 lines 5.16 KB
Raw
1 /// CRC32
2 /// Copyright (C) 2012, Kai Sellgren
3 /// Licensed under the MIT License.
4 /// http://www.opensource.org/licenses/mit-license.php
5 /// source: https://raw.githubusercontent.com/kaisellgren/CRC32/refs/heads/master/lib/crc32.dart
6 // ignore_for_file: parameter_assignments
7
8 import 'dart:convert';
9
10 /// Computes Cyclic Redundancy Check values.
11 class CRC32 {
12 /// Computes a CRC32 value for the given input.
13 ///
14 /// The return value is an unsigned integer.
15 ///
16 /// You may optionally specify the beginning CRC value.
17 static int compute(dynamic input, [int crc = 0]) {
18 if (input == null) throw new ArgumentError.notNull('input');
19 if (input is String) input = utf8.encode(input);
20
21 crc = crc ^ (0xffffffff);
22
23 for (final byte in input) {
24 if (!(byte >= -128 && byte <= 255))
25 throw new FormatException("Invalid value in input: $byte");
26
27 final x = CRC32._table[(crc ^ byte) & 0xff];
28 crc = (crc & 0xffffffff) >> 8; // crc >>> 8 (32-bit unsigned integer)
29 crc ^= x;
30 }
31
32 crc = crc ^ (0xffffffff);
33
34 // Turns the signed integer into an unsigned integer.
35 return crc & 0xffffffff;
36 }
37
38 static const _table = const [
39 0x00000000,
40 0x77073096,
41 0xEE0E612C,
42 0x990951BA,
43 0x076DC419,
44 0x706AF48F,
45 0xE963A535,
46 0x9E6495A3,
47 0x0EDB8832,
48 0x79DCB8A4,
49 0xE0D5E91E,
50 0x97D2D988,
51 0x09B64C2B,
52 0x7EB17CBD,
53 0xE7B82D07,
54 0x90BF1D91,
55 0x1DB71064,
56 0x6AB020F2,
57 0xF3B97148,
58 0x84BE41DE,
59 0x1ADAD47D,
60 0x6DDDE4EB,
61 0xF4D4B551,
62 0x83D385C7,
63 0x136C9856,
64 0x646BA8C0,
65 0xFD62F97A,
66 0x8A65C9EC,
67 0x14015C4F,
68 0x63066CD9,
69 0xFA0F3D63,
70 0x8D080DF5,
71 0x3B6E20C8,
72 0x4C69105E,
73 0xD56041E4,
74 0xA2677172,
75 0x3C03E4D1,
76 0x4B04D447,
77 0xD20D85FD,
78 0xA50AB56B,
79 0x35B5A8FA,
80 0x42B2986C,
81 0xDBBBC9D6,
82 0xACBCF940,
83 0x32D86CE3,
84 0x45DF5C75,
85 0xDCD60DCF,
86 0xABD13D59,
87 0x26D930AC,
88 0x51DE003A,
89 0xC8D75180,
90 0xBFD06116,
91 0x21B4F4B5,
92 0x56B3C423,
93 0xCFBA9599,
94 0xB8BDA50F,
95 0x2802B89E,
96 0x5F058808,
97 0xC60CD9B2,
98 0xB10BE924,
99 0x2F6F7C87,
100 0x58684C11,
101 0xC1611DAB,
102 0xB6662D3D,
103 0x76DC4190,
104 0x01DB7106,
105 0x98D220BC,
106 0xEFD5102A,
107 0x71B18589,
108 0x06B6B51F,
109 0x9FBFE4A5,
110 0xE8B8D433,
111 0x7807C9A2,
112 0x0F00F934,
113 0x9609A88E,
114 0xE10E9818,
115 0x7F6A0DBB,
116 0x086D3D2D,
117 0x91646C97,
118 0xE6635C01,
119 0x6B6B51F4,
120 0x1C6C6162,
121 0x856530D8,
122 0xF262004E,
123 0x6C0695ED,
124 0x1B01A57B,
125 0x8208F4C1,
126 0xF50FC457,
127 0x65B0D9C6,
128 0x12B7E950,
129 0x8BBEB8EA,
130 0xFCB9887C,
131 0x62DD1DDF,
132 0x15DA2D49,
133 0x8CD37CF3,
134 0xFBD44C65,
135 0x4DB26158,
136 0x3AB551CE,
137 0xA3BC0074,
138 0xD4BB30E2,
139 0x4ADFA541,
140 0x3DD895D7,
141 0xA4D1C46D,
142 0xD3D6F4FB,
143 0x4369E96A,
144 0x346ED9FC,
145 0xAD678846,
146 0xDA60B8D0,
147 0x44042D73,
148 0x33031DE5,
149 0xAA0A4C5F,
150 0xDD0D7CC9,
151 0x5005713C,
152 0x270241AA,
153 0xBE0B1010,
154 0xC90C2086,
155 0x5768B525,
156 0x206F85B3,
157 0xB966D409,
158 0xCE61E49F,
159 0x5EDEF90E,
160 0x29D9C998,
161 0xB0D09822,
162 0xC7D7A8B4,
163 0x59B33D17,
164 0x2EB40D81,
165 0xB7BD5C3B,
166 0xC0BA6CAD,
167 0xEDB88320,
168 0x9ABFB3B6,
169 0x03B6E20C,
170 0x74B1D29A,
171 0xEAD54739,
172 0x9DD277AF,
173 0x04DB2615,
174 0x73DC1683,
175 0xE3630B12,
176 0x94643B84,
177 0x0D6D6A3E,
178 0x7A6A5AA8,
179 0xE40ECF0B,
180 0x9309FF9D,
181 0x0A00AE27,
182 0x7D079EB1,
183 0xF00F9344,
184 0x8708A3D2,
185 0x1E01F268,
186 0x6906C2FE,
187 0xF762575D,
188 0x806567CB,
189 0x196C3671,
190 0x6E6B06E7,
191 0xFED41B76,
192 0x89D32BE0,
193 0x10DA7A5A,
194 0x67DD4ACC,
195 0xF9B9DF6F,
196 0x8EBEEFF9,
197 0x17B7BE43,
198 0x60B08ED5,
199 0xD6D6A3E8,
200 0xA1D1937E,
201 0x38D8C2C4,
202 0x4FDFF252,
203 0xD1BB67F1,
204 0xA6BC5767,
205 0x3FB506DD,
206 0x48B2364B,
207 0xD80D2BDA,
208 0xAF0A1B4C,
209 0x36034AF6,
210 0x41047A60,
211 0xDF60EFC3,
212 0xA867DF55,
213 0x316E8EEF,
214 0x4669BE79,
215 0xCB61B38C,
216 0xBC66831A,
217 0x256FD2A0,
218 0x5268E236,
219 0xCC0C7795,
220 0xBB0B4703,
221 0x220216B9,
222 0x5505262F,
223 0xC5BA3BBE,
224 0xB2BD0B28,
225 0x2BB45A92,
226 0x5CB36A04,
227 0xC2D7FFA7,
228 0xB5D0CF31,
229 0x2CD99E8B,
230 0x5BDEAE1D,
231 0x9B64C2B0,
232 0xEC63F226,
233 0x756AA39C,
234 0x026D930A,
235 0x9C0906A9,
236 0xEB0E363F,
237 0x72076785,
238 0x05005713,
239 0x95BF4A82,
240 0xE2B87A14,
241 0x7BB12BAE,
242 0x0CB61B38,
243 0x92D28E9B,
244 0xE5D5BE0D,
245 0x7CDCEFB7,
246 0x0BDBDF21,
247 0x86D3D2D4,
248 0xF1D4E242,
249 0x68DDB3F8,
250 0x1FDA836E,
251 0x81BE16CD,
252 0xF6B9265B,
253 0x6FB077E1,
254 0x18B74777,
255 0x88085AE6,
256 0xFF0F6A70,
257 0x66063BCA,
258 0x11010B5C,
259 0x8F659EFF,
260 0xF862AE69,
261 0x616BFFD3,
262 0x166CCF45,
263 0xA00AE278,
264 0xD70DD2EE,
265 0x4E048354,
266 0x3903B3C2,
267 0xA7672661,
268 0xD06016F7,
269 0x4969474D,
270 0x3E6E77DB,
271 0xAED16A4A,
272 0xD9D65ADC,
273 0x40DF0B66,
274 0x37D83BF0,
275 0xA9BCAE53,
276 0xDEBB9EC5,
277 0x47B2CF7F,
278 0x30B5FFE9,
279 0xBDBDF21C,
280 0xCABAC28A,
281 0x53B39330,
282 0x24B4A3A6,
283 0xBAD03605,
284 0xCDD70693,
285 0x54DE5729,
286 0x23D967BF,
287 0xB3667A2E,
288 0xC4614AB8,
289 0x5D681B02,
290 0x2A6F2B94,
291 0xB40BBE37,
292 0xC30C8EA1,
293 0x5A05DF1B,
294 0x2D02EF8D,
295 ];
296 }