digest-crc 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1fe46270c7eae650508a5502eebb79a4869fbae54d0fbe839821d10875fb0ecf
4
- data.tar.gz: 4beab2099969546a407771454e5ded1a5490372418b33b078140f8cac82a2c97
3
+ metadata.gz: 9f6be5490751ab763c1fdd99f95a2e4ae0a22a073969623f14170159cb55c5b0
4
+ data.tar.gz: 7f152d312932b784ce074ce9d463bf07dd2bccf5035d9b1bc98dd8c804daa377
5
5
  SHA512:
6
- metadata.gz: e62799bcab7e38e635d5619beb1ac13c9c4cc5c0017604b5e060672190fc7c5fdc6bfbdc48d164bf191d5906d868f4552a6318930a6fa3d1983cac63acdf8aa5
7
- data.tar.gz: ff41e5f57d9f9b523105b72f76662b8fac5a1df7485742378bb93ed3e982fb8d69eae14199e7d285e38102d7e3970708b6615919502783f6050278a029666360
6
+ metadata.gz: 0e9e53d3fc14577e50276ea0f13b663bf62fcafbc2a063491e076bdec99d467f0c57ad0d0cb5b794af1dbadc6794db4070cb6d956b13f4525c5c30af3dea618b
7
+ data.tar.gz: '07198de582c8e350def1763a6c2593ad8a42065c675826c278e3326e81d1a1960b613879a7df017727e12cdc4a4ffc36c15350108a3f6d87076e1f28e4d81afe'
@@ -1,3 +1,8 @@
1
+ ### 0.6.1 / 2020-07-02
2
+
3
+ * Fix installation issues under bundler by adding rake as an explicit dependency
4
+ (@rogerluan).
5
+
1
6
  ### 0.6.0 / 2020-07-01
2
7
 
3
8
  * Implement _optional_ C extensions for all CRC algorithms, resulting in an
@@ -174,4 +179,3 @@
174
179
  * CRC32
175
180
  * CRC32 Mpeg
176
181
  * CRC64
177
-
data/README.md CHANGED
@@ -119,6 +119,113 @@ module Digest
119
119
  end
120
120
  ```
121
121
 
122
+ ## Benchmarks
123
+
124
+ ### Pure Ruby (ruby 2.7.1)
125
+
126
+ $ bundle exec rake clean
127
+ $ bundle exec ./benchmarks.rb
128
+ Loading Digest::CRC classes ...
129
+ Generating 1000 8Kb lengthed strings ...
130
+ Benchmarking Digest::CRC classes ...
131
+ user system total real
132
+ Digest::CRC1#update 0.349756 0.000002 0.349758 ( 0.351427)
133
+ Digest::CRC5#update 1.175206 0.000049 1.175255 ( 1.180975)
134
+ Digest::CRC8#update 1.023536 0.000015 1.023551 ( 1.029017)
135
+ Digest::CRC8_1Wire#update 1.012156 0.000000 1.012156 ( 1.017342)
136
+ Digest::CRC15#update 1.187286 0.000005 1.187291 ( 1.193634)
137
+ Digest::CRC16#update 0.998527 0.000013 0.998540 ( 1.003940)
138
+ Digest::CRC16CCITT#update 1.179864 0.000005 1.179869 ( 1.186134)
139
+ Digest::CRC16DNP#update 1.018969 0.000003 1.018972 ( 1.025248)
140
+ Digest::CRC16Genibus#update 1.196754 0.000065 1.196819 ( 1.203605)
141
+ Digest::CRC16Modbus#update 1.007367 0.000000 1.007367 ( 1.012325)
142
+ Digest::CRC16X25#update 1.044127 0.000000 1.044127 ( 1.052010)
143
+ Digest::CRC16USB#update 1.012804 0.000000 1.012804 ( 1.018324)
144
+ Digest::CRC16X25#update 1.009694 0.000000 1.009694 ( 1.015890)
145
+ Digest::CRC16XModem#update 1.210814 0.000000 1.210814 ( 1.217951)
146
+ Digest::CRC16ZModem#update 1.175239 0.000000 1.175239 ( 1.181395)
147
+ Digest::CRC24#update 1.207431 0.000000 1.207431 ( 1.213373)
148
+ Digest::CRC32#update 1.012334 0.000000 1.012334 ( 1.017671)
149
+ Digest::CRC32BZip2#update 1.190351 0.000000 1.190351 ( 1.196567)
150
+ Digest::CRC32c#update 1.021147 0.000000 1.021147 ( 1.027035)
151
+ Digest::CRC32Jam#update 1.002365 0.000000 1.002365 ( 1.007202)
152
+ Digest::CRC32MPEG#update 1.161925 0.000000 1.161925 ( 1.168058)
153
+ Digest::CRC32POSIX#update 1.191860 0.000967 1.192827 ( 1.198722)
154
+ Digest::CRC32XFER#update 1.217692 0.000000 1.217692 ( 1.224075)
155
+ Digest::CRC64#update 3.084106 0.000000 3.084106 ( 3.106840)
156
+ Digest::CRC64Jones#update 3.016687 0.000000 3.016687 ( 3.038963)
157
+ Digest::CRC64XZ#update 3.019690 0.000000 3.019690 ( 3.040971)
158
+
159
+ ### C extensions (ruby 2.7.1)
160
+ o
161
+ $ bundle exec rake build:c_exts
162
+ ...
163
+ $ bundle exec ./benchmarks.rb
164
+ Loading Digest::CRC classes ...
165
+ Generating 1000 8Kb lengthed strings ...
166
+ Benchmarking Digest::CRC classes ...
167
+ user system total real
168
+ Digest::CRC1#update 0.356025 0.000016 0.356041 ( 0.365345)
169
+ Digest::CRC5#update 0.023957 0.000001 0.023958 ( 0.024835)
170
+ Digest::CRC8#update 0.021254 0.000007 0.021261 ( 0.024647)
171
+ Digest::CRC8_1Wire#update 0.039129 0.000000 0.039129 ( 0.042417)
172
+ Digest::CRC15#update 0.030285 0.000000 0.030285 ( 0.030560)
173
+ Digest::CRC16#update 0.023003 0.000000 0.023003 ( 0.023267)
174
+ Digest::CRC16CCITT#update 0.028207 0.000000 0.028207 ( 0.028467)
175
+ Digest::CRC16DNP#update 0.022861 0.000000 0.022861 ( 0.023111)
176
+ Digest::CRC16Genibus#update 0.028041 0.000000 0.028041 ( 0.028359)
177
+ Digest::CRC16Modbus#update 0.022931 0.000009 0.022940 ( 0.023560)
178
+ Digest::CRC16X25#update 0.022808 0.000000 0.022808 ( 0.023054)
179
+ Digest::CRC16USB#update 0.022258 0.000882 0.023140 ( 0.023418)
180
+ Digest::CRC16X25#update 0.022816 0.000000 0.022816 ( 0.023084)
181
+ Digest::CRC16XModem#update 0.027984 0.000000 0.027984 ( 0.028269)
182
+ Digest::CRC16ZModem#update 0.027968 0.000000 0.027968 ( 0.028214)
183
+ Digest::CRC24#update 0.028426 0.000000 0.028426 ( 0.028687)
184
+ Digest::CRC32#update 0.022805 0.000000 0.022805 ( 0.023043)
185
+ Digest::CRC32BZip2#update 0.025519 0.000000 0.025519 ( 0.025797)
186
+ Digest::CRC32c#update 0.022807 0.000000 0.022807 ( 0.023069)
187
+ Digest::CRC32Jam#update 0.023006 0.000000 0.023006 ( 0.023231)
188
+ Digest::CRC32MPEG#update 0.025536 0.000000 0.025536 ( 0.025861)
189
+ Digest::CRC32POSIX#update 0.025557 0.000000 0.025557 ( 0.025841)
190
+ Digest::CRC32XFER#update 0.025310 0.000000 0.025310 ( 0.025599)
191
+ Digest::CRC64#update 0.023182 0.000000 0.023182 ( 0.023421)
192
+ Digest::CRC64Jones#update 0.022916 0.000000 0.022916 ( 0.023139)
193
+ Digest::CRC64XZ#update 0.022879 0.000000 0.022879 ( 0.023131)
194
+
195
+ ### Pure Ruby (jruby 9.2.12.0)
196
+
197
+ $ bundle exec ./benchmarks.rb
198
+ Loading Digest::CRC classes ...
199
+ Generating 1000 8Kb lengthed strings ...
200
+ Benchmarking Digest::CRC classes ...
201
+ user system total real
202
+ Digest::CRC1#update 1.030000 0.090000 1.120000 ( 0.511189)
203
+ Digest::CRC5#update 1.620000 0.060000 1.680000 ( 1.096031)
204
+ Digest::CRC8#update 1.560000 0.070000 1.630000 ( 1.083921)
205
+ Digest::CRC8_1Wire#update 0.930000 0.040000 0.970000 ( 0.927024)
206
+ Digest::CRC15#update 1.590000 0.070000 1.660000 ( 1.132566)
207
+ Digest::CRC16#update 1.650000 0.060000 1.710000 ( 1.074508)
208
+ Digest::CRC16CCITT#update 1.610000 0.060000 1.670000 ( 1.190860)
209
+ Digest::CRC16DNP#update 1.270000 0.010000 1.280000 ( 0.938132)
210
+ Digest::CRC16Genibus#update 1.620000 0.030000 1.650000 ( 1.148556)
211
+ Digest::CRC16Modbus#update 1.070000 0.020000 1.090000 ( 0.881455)
212
+ Digest::CRC16X25#update 1.110000 0.010000 1.120000 ( 0.945366)
213
+ Digest::CRC16USB#update 1.140000 0.000000 1.140000 ( 0.984367)
214
+ Digest::CRC16X25#update 0.920000 0.010000 0.930000 ( 0.872541)
215
+ Digest::CRC16XModem#update 1.530000 0.010000 1.540000 ( 1.092838)
216
+ Digest::CRC16ZModem#update 1.720000 0.010000 1.730000 ( 1.164787)
217
+ Digest::CRC24#update 1.810000 0.020000 1.830000 ( 1.084953)
218
+ Digest::CRC32#update 1.590000 0.010000 1.600000 ( 1.105553)
219
+ Digest::CRC32BZip2#update 1.520000 0.010000 1.530000 ( 1.070839)
220
+ Digest::CRC32c#update 0.960000 0.010000 0.970000 ( 0.881989)
221
+ Digest::CRC32Jam#update 1.030000 0.010000 1.040000 ( 0.907208)
222
+ Digest::CRC32MPEG#update 1.420000 0.010000 1.430000 ( 0.994035)
223
+ Digest::CRC32POSIX#update 1.530000 0.020000 1.550000 ( 1.106366)
224
+ Digest::CRC32XFER#update 1.650000 0.010000 1.660000 ( 1.097647)
225
+ Digest::CRC64#update 3.440000 0.030000 3.470000 ( 2.771806)
226
+ Digest::CRC64Jones#update 2.630000 0.010000 2.640000 ( 2.628016)
227
+ Digest::CRC64XZ#update 3.200000 0.020000 3.220000 ( 2.913442)
228
+
122
229
  ## Thanks
123
230
 
124
231
  Special thanks go out to the [pycrc](http://www.tty1.net/pycrc/) library
@@ -40,27 +40,29 @@ static const crc12_t crc12_table[256] = {
40
40
 
41
41
  crc12_t crc_reflect(crc12_t data, size_t data_len)
42
42
  {
43
- unsigned int i;
44
- crc12_t ret;
43
+ unsigned int i;
44
+ crc12_t ret = data & 0x01;
45
45
 
46
- ret = data & 0x01;
47
- for (i = 1; i < data_len; i++) {
48
- data >>= 1;
49
- ret = (ret << 1) | (data & 0x01);
50
- }
51
- return ret;
52
- }
46
+ for (i = 1; i < data_len; i++)
47
+ {
48
+ data >>= 1;
49
+ ret = (ret << 1) | (data & 0x01);
50
+ }
53
51
 
52
+ return ret;
53
+ }
54
54
 
55
55
  crc12_t crc12_3gpp_update(crc12_t crc, const void *data, size_t data_len)
56
56
  {
57
- const unsigned char *d = (const unsigned char *)data;
58
- unsigned int tbl_idx;
57
+ const unsigned char *d = (const unsigned char *)data;
58
+ unsigned int tbl_idx;
59
+
60
+ while (data_len--)
61
+ {
62
+ tbl_idx = ((crc >> 4) ^ *d) & 0xff;
63
+ crc = (crc12_table[tbl_idx] ^ (crc << 8)) & 0xfff;
64
+ d++;
65
+ }
59
66
 
60
- while (data_len--) {
61
- tbl_idx = ((crc >> 4) ^ *d) & 0xff;
62
- crc = (crc12_table[tbl_idx] ^ (crc << 8)) & 0xfff;
63
- d++;
64
- }
65
- return crc & 0xfff;
67
+ return crc & 0xfff;
66
68
  }
@@ -38,16 +38,17 @@ static const crc15_t crc15_table[256] = {
38
38
  0x276f, 0x62f6, 0x69c4, 0x2c5d, 0x7fa0, 0x3a39, 0x310b, 0x7492, 0x5368, 0x16f1, 0x1dc3, 0x585a, 0x0ba7, 0x4e3e, 0x450c, 0x0095
39
39
  };
40
40
 
41
-
42
41
  crc15_t crc15_update(crc15_t crc, const void *data, size_t data_len)
43
42
  {
44
- const unsigned char *d = (const unsigned char *)data;
45
- unsigned int tbl_idx;
43
+ const unsigned char *d = (const unsigned char *)data;
44
+ unsigned int tbl_idx;
45
+
46
+ while (data_len--)
47
+ {
48
+ tbl_idx = ((crc >> 7) ^ *d) & 0xff;
49
+ crc = (crc15_table[tbl_idx] ^ (crc << 8)) & 0x7fff;
50
+ d++;
51
+ }
46
52
 
47
- while (data_len--) {
48
- tbl_idx = ((crc >> 7) ^ *d) & 0xff;
49
- crc = (crc15_table[tbl_idx] ^ (crc << 8)) & 0x7fff;
50
- d++;
51
- }
52
- return crc & 0x7fff;
53
+ return crc & 0x7fff;
53
54
  }
@@ -20,50 +20,51 @@
20
20
  * Static table used for the table_driven implementation.
21
21
  */
22
22
  static const crc16_t crc16_table[256] = {
23
- 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241,
24
- 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440,
25
- 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40,
26
- 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841,
27
- 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40,
28
- 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41,
29
- 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641,
30
- 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040,
31
- 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240,
32
- 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441,
33
- 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41,
34
- 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840,
35
- 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41,
36
- 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40,
37
- 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640,
38
- 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041,
39
- 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240,
40
- 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441,
41
- 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41,
42
- 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840,
43
- 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41,
44
- 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40,
45
- 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640,
46
- 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041,
47
- 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241,
48
- 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440,
49
- 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40,
50
- 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841,
51
- 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40,
52
- 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41,
53
- 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641,
54
- 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040
23
+ 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241,
24
+ 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440,
25
+ 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40,
26
+ 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841,
27
+ 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40,
28
+ 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41,
29
+ 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641,
30
+ 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040,
31
+ 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240,
32
+ 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441,
33
+ 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41,
34
+ 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840,
35
+ 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41,
36
+ 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40,
37
+ 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640,
38
+ 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041,
39
+ 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240,
40
+ 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441,
41
+ 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41,
42
+ 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840,
43
+ 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41,
44
+ 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40,
45
+ 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640,
46
+ 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041,
47
+ 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241,
48
+ 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440,
49
+ 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40,
50
+ 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841,
51
+ 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40,
52
+ 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41,
53
+ 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641,
54
+ 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040
55
55
  };
56
56
 
57
-
58
57
  crc16_t crc16_update(crc16_t crc, const void *data, size_t data_len)
59
58
  {
60
- const unsigned char *d = (const unsigned char *)data;
61
- unsigned int tbl_idx;
59
+ const unsigned char *d = (const unsigned char *)data;
60
+ unsigned int tbl_idx;
61
+
62
+ while (data_len--)
63
+ {
64
+ tbl_idx = (crc ^ *d) & 0xff;
65
+ crc = (crc16_table[tbl_idx] ^ (crc >> 8)) & 0xffff;
66
+ d++;
67
+ }
62
68
 
63
- while (data_len--) {
64
- tbl_idx = (crc ^ *d) & 0xff;
65
- crc = (crc16_table[tbl_idx] ^ (crc >> 8)) & 0xffff;
66
- d++;
67
- }
68
- return crc & 0xffff;
69
+ return crc & 0xffff;
69
70
  }
@@ -20,50 +20,51 @@
20
20
  * Static table used for the table_driven implementation.
21
21
  */
22
22
  static const crc16_t crc16_ccitt_table[256] = {
23
- 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
24
- 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
25
- 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
26
- 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
27
- 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
28
- 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
29
- 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
30
- 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
31
- 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
32
- 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
33
- 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
34
- 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
35
- 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
36
- 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
37
- 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
38
- 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
39
- 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
40
- 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
41
- 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
42
- 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
43
- 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
44
- 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
45
- 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
46
- 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
47
- 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
48
- 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
49
- 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
50
- 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
51
- 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
52
- 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
53
- 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
54
- 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
23
+ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
24
+ 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
25
+ 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
26
+ 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
27
+ 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
28
+ 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
29
+ 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
30
+ 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
31
+ 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
32
+ 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
33
+ 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
34
+ 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
35
+ 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
36
+ 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
37
+ 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
38
+ 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
39
+ 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
40
+ 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
41
+ 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
42
+ 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
43
+ 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
44
+ 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
45
+ 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
46
+ 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
47
+ 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
48
+ 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
49
+ 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
50
+ 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
51
+ 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
52
+ 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
53
+ 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
54
+ 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
55
55
  };
56
56
 
57
-
58
57
  crc16_t crc16_ccitt_update(crc16_t crc, const void *data, size_t data_len)
59
58
  {
60
- const unsigned char *d = (const unsigned char *)data;
61
- unsigned int tbl_idx;
59
+ const unsigned char *d = (const unsigned char *)data;
60
+ unsigned int tbl_idx;
61
+
62
+ while (data_len--)
63
+ {
64
+ tbl_idx = ((crc >> 8) ^ *d) & 0xff;
65
+ crc = (crc16_ccitt_table[tbl_idx] ^ (crc << 8)) & 0xffff;
66
+ d++;
67
+ }
62
68
 
63
- while (data_len--) {
64
- tbl_idx = ((crc >> 8) ^ *d) & 0xff;
65
- crc = (crc16_ccitt_table[tbl_idx] ^ (crc << 8)) & 0xffff;
66
- d++;
67
- }
68
- return crc & 0xffff;
69
+ return crc & 0xffff;
69
70
  }
@@ -4,50 +4,51 @@
4
4
  * Static table used for the table_driven implementation.
5
5
  */
6
6
  static const crc16_t crc16_dnp_table[256] = {
7
- 0x0000, 0x365e, 0x6cbc, 0x5ae2, 0xd978, 0xef26, 0xb5c4, 0x839a,
8
- 0xff89, 0xc9d7, 0x9335, 0xa56b, 0x26f1, 0x10af, 0x4a4d, 0x7c13,
9
- 0xb26b, 0x8435, 0xded7, 0xe889, 0x6b13, 0x5d4d, 0x07af, 0x31f1,
10
- 0x4de2, 0x7bbc, 0x215e, 0x1700, 0x949a, 0xa2c4, 0xf826, 0xce78,
11
- 0x29af, 0x1ff1, 0x4513, 0x734d, 0xf0d7, 0xc689, 0x9c6b, 0xaa35,
12
- 0xd626, 0xe078, 0xba9a, 0x8cc4, 0x0f5e, 0x3900, 0x63e2, 0x55bc,
13
- 0x9bc4, 0xad9a, 0xf778, 0xc126, 0x42bc, 0x74e2, 0x2e00, 0x185e,
14
- 0x644d, 0x5213, 0x08f1, 0x3eaf, 0xbd35, 0x8b6b, 0xd189, 0xe7d7,
15
- 0x535e, 0x6500, 0x3fe2, 0x09bc, 0x8a26, 0xbc78, 0xe69a, 0xd0c4,
16
- 0xacd7, 0x9a89, 0xc06b, 0xf635, 0x75af, 0x43f1, 0x1913, 0x2f4d,
17
- 0xe135, 0xd76b, 0x8d89, 0xbbd7, 0x384d, 0x0e13, 0x54f1, 0x62af,
18
- 0x1ebc, 0x28e2, 0x7200, 0x445e, 0xc7c4, 0xf19a, 0xab78, 0x9d26,
19
- 0x7af1, 0x4caf, 0x164d, 0x2013, 0xa389, 0x95d7, 0xcf35, 0xf96b,
20
- 0x8578, 0xb326, 0xe9c4, 0xdf9a, 0x5c00, 0x6a5e, 0x30bc, 0x06e2,
21
- 0xc89a, 0xfec4, 0xa426, 0x9278, 0x11e2, 0x27bc, 0x7d5e, 0x4b00,
22
- 0x3713, 0x014d, 0x5baf, 0x6df1, 0xee6b, 0xd835, 0x82d7, 0xb489,
23
- 0xa6bc, 0x90e2, 0xca00, 0xfc5e, 0x7fc4, 0x499a, 0x1378, 0x2526,
24
- 0x5935, 0x6f6b, 0x3589, 0x03d7, 0x804d, 0xb613, 0xecf1, 0xdaaf,
25
- 0x14d7, 0x2289, 0x786b, 0x4e35, 0xcdaf, 0xfbf1, 0xa113, 0x974d,
26
- 0xeb5e, 0xdd00, 0x87e2, 0xb1bc, 0x3226, 0x0478, 0x5e9a, 0x68c4,
27
- 0x8f13, 0xb94d, 0xe3af, 0xd5f1, 0x566b, 0x6035, 0x3ad7, 0x0c89,
28
- 0x709a, 0x46c4, 0x1c26, 0x2a78, 0xa9e2, 0x9fbc, 0xc55e, 0xf300,
29
- 0x3d78, 0x0b26, 0x51c4, 0x679a, 0xe400, 0xd25e, 0x88bc, 0xbee2,
30
- 0xc2f1, 0xf4af, 0xae4d, 0x9813, 0x1b89, 0x2dd7, 0x7735, 0x416b,
31
- 0xf5e2, 0xc3bc, 0x995e, 0xaf00, 0x2c9a, 0x1ac4, 0x4026, 0x7678,
32
- 0x0a6b, 0x3c35, 0x66d7, 0x5089, 0xd313, 0xe54d, 0xbfaf, 0x89f1,
33
- 0x4789, 0x71d7, 0x2b35, 0x1d6b, 0x9ef1, 0xa8af, 0xf24d, 0xc413,
34
- 0xb800, 0x8e5e, 0xd4bc, 0xe2e2, 0x6178, 0x5726, 0x0dc4, 0x3b9a,
35
- 0xdc4d, 0xea13, 0xb0f1, 0x86af, 0x0535, 0x336b, 0x6989, 0x5fd7,
36
- 0x23c4, 0x159a, 0x4f78, 0x7926, 0xfabc, 0xcce2, 0x9600, 0xa05e,
37
- 0x6e26, 0x5878, 0x029a, 0x34c4, 0xb75e, 0x8100, 0xdbe2, 0xedbc,
38
- 0x91af, 0xa7f1, 0xfd13, 0xcb4d, 0x48d7, 0x7e89, 0x246b, 0x1235
7
+ 0x0000, 0x365e, 0x6cbc, 0x5ae2, 0xd978, 0xef26, 0xb5c4, 0x839a,
8
+ 0xff89, 0xc9d7, 0x9335, 0xa56b, 0x26f1, 0x10af, 0x4a4d, 0x7c13,
9
+ 0xb26b, 0x8435, 0xded7, 0xe889, 0x6b13, 0x5d4d, 0x07af, 0x31f1,
10
+ 0x4de2, 0x7bbc, 0x215e, 0x1700, 0x949a, 0xa2c4, 0xf826, 0xce78,
11
+ 0x29af, 0x1ff1, 0x4513, 0x734d, 0xf0d7, 0xc689, 0x9c6b, 0xaa35,
12
+ 0xd626, 0xe078, 0xba9a, 0x8cc4, 0x0f5e, 0x3900, 0x63e2, 0x55bc,
13
+ 0x9bc4, 0xad9a, 0xf778, 0xc126, 0x42bc, 0x74e2, 0x2e00, 0x185e,
14
+ 0x644d, 0x5213, 0x08f1, 0x3eaf, 0xbd35, 0x8b6b, 0xd189, 0xe7d7,
15
+ 0x535e, 0x6500, 0x3fe2, 0x09bc, 0x8a26, 0xbc78, 0xe69a, 0xd0c4,
16
+ 0xacd7, 0x9a89, 0xc06b, 0xf635, 0x75af, 0x43f1, 0x1913, 0x2f4d,
17
+ 0xe135, 0xd76b, 0x8d89, 0xbbd7, 0x384d, 0x0e13, 0x54f1, 0x62af,
18
+ 0x1ebc, 0x28e2, 0x7200, 0x445e, 0xc7c4, 0xf19a, 0xab78, 0x9d26,
19
+ 0x7af1, 0x4caf, 0x164d, 0x2013, 0xa389, 0x95d7, 0xcf35, 0xf96b,
20
+ 0x8578, 0xb326, 0xe9c4, 0xdf9a, 0x5c00, 0x6a5e, 0x30bc, 0x06e2,
21
+ 0xc89a, 0xfec4, 0xa426, 0x9278, 0x11e2, 0x27bc, 0x7d5e, 0x4b00,
22
+ 0x3713, 0x014d, 0x5baf, 0x6df1, 0xee6b, 0xd835, 0x82d7, 0xb489,
23
+ 0xa6bc, 0x90e2, 0xca00, 0xfc5e, 0x7fc4, 0x499a, 0x1378, 0x2526,
24
+ 0x5935, 0x6f6b, 0x3589, 0x03d7, 0x804d, 0xb613, 0xecf1, 0xdaaf,
25
+ 0x14d7, 0x2289, 0x786b, 0x4e35, 0xcdaf, 0xfbf1, 0xa113, 0x974d,
26
+ 0xeb5e, 0xdd00, 0x87e2, 0xb1bc, 0x3226, 0x0478, 0x5e9a, 0x68c4,
27
+ 0x8f13, 0xb94d, 0xe3af, 0xd5f1, 0x566b, 0x6035, 0x3ad7, 0x0c89,
28
+ 0x709a, 0x46c4, 0x1c26, 0x2a78, 0xa9e2, 0x9fbc, 0xc55e, 0xf300,
29
+ 0x3d78, 0x0b26, 0x51c4, 0x679a, 0xe400, 0xd25e, 0x88bc, 0xbee2,
30
+ 0xc2f1, 0xf4af, 0xae4d, 0x9813, 0x1b89, 0x2dd7, 0x7735, 0x416b,
31
+ 0xf5e2, 0xc3bc, 0x995e, 0xaf00, 0x2c9a, 0x1ac4, 0x4026, 0x7678,
32
+ 0x0a6b, 0x3c35, 0x66d7, 0x5089, 0xd313, 0xe54d, 0xbfaf, 0x89f1,
33
+ 0x4789, 0x71d7, 0x2b35, 0x1d6b, 0x9ef1, 0xa8af, 0xf24d, 0xc413,
34
+ 0xb800, 0x8e5e, 0xd4bc, 0xe2e2, 0x6178, 0x5726, 0x0dc4, 0x3b9a,
35
+ 0xdc4d, 0xea13, 0xb0f1, 0x86af, 0x0535, 0x336b, 0x6989, 0x5fd7,
36
+ 0x23c4, 0x159a, 0x4f78, 0x7926, 0xfabc, 0xcce2, 0x9600, 0xa05e,
37
+ 0x6e26, 0x5878, 0x029a, 0x34c4, 0xb75e, 0x8100, 0xdbe2, 0xedbc,
38
+ 0x91af, 0xa7f1, 0xfd13, 0xcb4d, 0x48d7, 0x7e89, 0x246b, 0x1235
39
39
  };
40
40
 
41
-
42
41
  crc16_t crc16_dnp_update(crc16_t crc, const void *data, size_t data_len)
43
42
  {
44
- const unsigned char *d = (const unsigned char *)data;
45
- unsigned int tbl_idx;
43
+ const unsigned char *d = (const unsigned char *)data;
44
+ unsigned int tbl_idx;
45
+
46
+ while (data_len--)
47
+ {
48
+ tbl_idx = (crc ^ *d) & 0xff;
49
+ crc = (crc << 8) ^ crc16_dnp_table[tbl_idx];
50
+ d++;
51
+ }
46
52
 
47
- while (data_len--) {
48
- tbl_idx = (crc ^ *d) & 0xff;
49
- crc = (crc << 8) ^ crc16_dnp_table[tbl_idx];
50
- d++;
51
- }
52
- return crc & 0xffff;
53
+ return crc & 0xffff;
53
54
  }