• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use crate::util::*;
2 
crc8_table(width: u8, poly: u8, reflect: bool) -> [u8; 256]3 pub(crate) const fn crc8_table(width: u8, poly: u8, reflect: bool) -> [u8; 256] {
4     let poly = if reflect {
5         let poly = poly.reverse_bits();
6         poly >> (8u8 - width)
7     } else {
8         poly << (8u8 - width)
9     };
10 
11     let mut table = [0u8; 256];
12     let mut i = 0;
13     while i < table.len() {
14         table[i] = crc8(poly, reflect, i as u8);
15         i += 1;
16     }
17     table
18 }
19 
crc8_table_slice_16(width: u8, poly: u8, reflect: bool) -> [[u8; 256]; 16]20 pub(crate) const fn crc8_table_slice_16(width: u8, poly: u8, reflect: bool) -> [[u8; 256]; 16] {
21     let poly = if reflect {
22         let poly = poly.reverse_bits();
23         poly >> (8u8 - width)
24     } else {
25         poly << (8u8 - width)
26     };
27 
28     let mut table = [[0u8; 256]; 16];
29     let mut i = 0;
30     while i < 256 {
31         table[0][i] = crc8(poly, reflect, i as u8);
32         i += 1;
33     }
34 
35     let mut i = 0;
36     while i < 256 {
37         let mut e = 1;
38         while e < 16 {
39             let one_lower = table[e - 1][i];
40             table[e][i] = table[0][one_lower as usize];
41             e += 1;
42         }
43         i += 1;
44     }
45     table
46 }
47 
crc16_table(width: u8, poly: u16, reflect: bool) -> [u16; 256]48 pub(crate) const fn crc16_table(width: u8, poly: u16, reflect: bool) -> [u16; 256] {
49     let poly = if reflect {
50         let poly = poly.reverse_bits();
51         poly >> (16u8 - width)
52     } else {
53         poly << (16u8 - width)
54     };
55 
56     let mut table = [0u16; 256];
57     let mut i = 0;
58     while i < table.len() {
59         table[i] = crc16(poly, reflect, i as u16);
60         i += 1;
61     }
62     table
63 }
64 
crc16_table_slice_16(width: u8, poly: u16, reflect: bool) -> [[u16; 256]; 16]65 pub(crate) const fn crc16_table_slice_16(width: u8, poly: u16, reflect: bool) -> [[u16; 256]; 16] {
66     let poly = if reflect {
67         let poly = poly.reverse_bits();
68         poly >> (16u8 - width)
69     } else {
70         poly << (16u8 - width)
71     };
72 
73     let mut table = [[0u16; 256]; 16];
74     let mut i = 0;
75     while i < 256 {
76         table[0][i] = crc16(poly, reflect, i as u16);
77         i += 1;
78     }
79 
80     let mut i = 0;
81     while i < 256 {
82         let mut e = 1;
83         while e < 16 {
84             let one_lower = table[e - 1][i];
85             if reflect {
86                 table[e][i] = (one_lower >> 8) ^ table[0][(one_lower & 0xFF) as usize];
87             } else {
88                 table[e][i] = (one_lower << 8) ^ table[0][((one_lower >> 8) & 0xFF) as usize];
89             }
90             e += 1;
91         }
92         i += 1;
93     }
94     table
95 }
96 
crc32_table(width: u8, poly: u32, reflect: bool) -> [u32; 256]97 pub(crate) const fn crc32_table(width: u8, poly: u32, reflect: bool) -> [u32; 256] {
98     let poly = if reflect {
99         let poly = poly.reverse_bits();
100         poly >> (32u8 - width)
101     } else {
102         poly << (32u8 - width)
103     };
104 
105     let mut table = [0u32; 256];
106     let mut i = 0;
107     while i < 256 {
108         table[i] = crc32(poly, reflect, i as u32);
109         i += 1;
110     }
111 
112     table
113 }
114 
crc32_table_slice_16(width: u8, poly: u32, reflect: bool) -> [[u32; 256]; 16]115 pub(crate) const fn crc32_table_slice_16(width: u8, poly: u32, reflect: bool) -> [[u32; 256]; 16] {
116     let poly = if reflect {
117         let poly = poly.reverse_bits();
118         poly >> (32u8 - width)
119     } else {
120         poly << (32u8 - width)
121     };
122 
123     let mut table = [[0u32; 256]; 16];
124     let mut i = 0;
125     while i < 256 {
126         table[0][i] = crc32(poly, reflect, i as u32);
127         i += 1;
128     }
129 
130     let mut i = 0;
131     while i < 256 {
132         let mut e = 1;
133         while e < 16 {
134             let one_lower = table[e - 1][i];
135             if reflect {
136                 table[e][i] = (one_lower >> 8) ^ table[0][(one_lower & 0xFF) as usize];
137             } else {
138                 table[e][i] = (one_lower << 8) ^ table[0][((one_lower >> 24) & 0xFF) as usize];
139             }
140             e += 1;
141         }
142         i += 1;
143     }
144     table
145 }
146 
crc64_table(width: u8, poly: u64, reflect: bool) -> [u64; 256]147 pub(crate) const fn crc64_table(width: u8, poly: u64, reflect: bool) -> [u64; 256] {
148     let poly = if reflect {
149         let poly = poly.reverse_bits();
150         poly >> (64u8 - width)
151     } else {
152         poly << (64u8 - width)
153     };
154 
155     let mut table = [0u64; 256];
156     let mut i = 0;
157     while i < table.len() {
158         table[i] = crc64(poly, reflect, i as u64);
159         i += 1;
160     }
161     table
162 }
163 
crc64_table_slice_16(width: u8, poly: u64, reflect: bool) -> [[u64; 256]; 16]164 pub(crate) const fn crc64_table_slice_16(width: u8, poly: u64, reflect: bool) -> [[u64; 256]; 16] {
165     let poly = if reflect {
166         let poly = poly.reverse_bits();
167         poly >> (64u8 - width)
168     } else {
169         poly << (64u8 - width)
170     };
171 
172     let mut table = [[0u64; 256]; 16];
173     let mut i = 0;
174     while i < 256 {
175         table[0][i] = crc64(poly, reflect, i as u64);
176         i += 1;
177     }
178 
179     let mut i = 0;
180     while i < 256 {
181         let mut e = 1;
182         while e < 16 {
183             let one_lower = table[e - 1][i];
184             if reflect {
185                 table[e][i] = (one_lower >> 8) ^ table[0][(one_lower & 0xFF) as usize];
186             } else {
187                 table[e][i] = (one_lower << 8) ^ table[0][((one_lower >> 56) & 0xFF) as usize];
188             }
189             e += 1;
190         }
191         i += 1;
192     }
193     table
194 }
195 
crc128_table(width: u8, poly: u128, reflect: bool) -> [u128; 256]196 pub(crate) const fn crc128_table(width: u8, poly: u128, reflect: bool) -> [u128; 256] {
197     let poly = if reflect {
198         let poly = poly.reverse_bits();
199         poly >> (128u8 - width)
200     } else {
201         poly << (128u8 - width)
202     };
203 
204     let mut table = [0u128; 256];
205     let mut i = 0;
206     while i < table.len() {
207         table[i] = crc128(poly, reflect, i as u128);
208         i += 1;
209     }
210     table
211 }
212 
crc128_table_slice_16( width: u8, poly: u128, reflect: bool, ) -> [[u128; 256]; 16]213 pub(crate) const fn crc128_table_slice_16(
214     width: u8,
215     poly: u128,
216     reflect: bool,
217 ) -> [[u128; 256]; 16] {
218     let poly = if reflect {
219         let poly = poly.reverse_bits();
220         poly >> (128u8 - width)
221     } else {
222         poly << (128u8 - width)
223     };
224 
225     let mut table = [[0u128; 256]; 16];
226     let mut i = 0;
227     while i < 256 {
228         table[0][i] = crc128(poly, reflect, i as u128);
229         i += 1;
230     }
231 
232     let mut i = 0;
233     while i < 256 {
234         let mut e = 1;
235         while e < 16 {
236             let one_lower = table[e - 1][i];
237             if reflect {
238                 table[e][i] = (one_lower >> 8) ^ table[0][(one_lower & 0xFF) as usize];
239             } else {
240                 table[e][i] = (one_lower << 8) ^ table[0][((one_lower >> 120) & 0xFF) as usize];
241             }
242             e += 1;
243         }
244         i += 1;
245     }
246     table
247 }
248