crc 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/HISTORY.ja.md +8 -0
- data/README.ja.md +281 -0
- data/README.md +26 -26
- data/bin/rbcrc +6 -6
- data/gemstub.rb +2 -2
- data/lib/crc.rb +37 -33
- data/lib/crc/_byruby.rb +5 -5
- data/lib/crc/_extensions.rb +8 -8
- data/lib/crc/_file.rb +1 -1
- data/lib/crc/_magic.rb +5 -5
- data/lib/crc/{_modules.rb → _models.rb} +4 -4
- data/lib/crc/_shift.rb +1 -1
- data/lib/crc/acrc.rb +1 -1
- data/lib/crc/version.rb +1 -1
- data/test/common.rb +3 -3
- data/test/self_check.rb +2 -2
- data/test/test_arc.rb +1 -1
- data/test/test_block.rb +1 -1
- data/test/test_magic.rb +1 -1
- metadata +12 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0b6f6d28a243bad0ffb9e82e9aee4209345b284cd82433783da10a2ebe60c049
|
4
|
+
data.tar.gz: e7c0aea67d734fc21567428df2d46047e2d8484d1f6147dbafcd4f9d280d8466
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '02249a8be40ac1ec6590841b217aec8f4cc0f5a5fddd1f563e573820bc50094320aed04b03ebcdcf93e0c4b85d19da8fe0973eaa6f3c586da3702a69ab6f7c08'
|
7
|
+
data.tar.gz: 9b5885a2b02026dc254953ce93024b5a8ac69e576698c6f4a8a42b0b93062bb5011d7c6478498c3bee6635b8a185b795f559591970f122ca81c6e68d7d32b2fb
|
data/HISTORY.ja.md
CHANGED
@@ -2,6 +2,14 @@ This document is written in Japanese.
|
|
2
2
|
|
3
3
|
# crc for ruby の更新履歴
|
4
4
|
|
5
|
+
## crc-0.4.2 (令和2年9月20日 日曜日)
|
6
|
+
|
7
|
+
* "CRC Module" は "CRC Model" とするべきなので修正
|
8
|
+
* 初期値の間違っていた CRC モデルがあったため修正
|
9
|
+
* "calcurator" は "calculator" の誤植なので修正 (thanks @stbnrivas [#2](https://github.com/dearblue/ruby-crc/pull/2))
|
10
|
+
* 間違ったリンクの修正 (thanks @simi [#1](https://github.com/dearblue/ruby-crc/pull/1))
|
11
|
+
|
12
|
+
|
5
13
|
## crc-0.4.1 (平成29年4月1日 土曜日)
|
6
14
|
|
7
15
|
* rbcrc -lvv の表示に、ビット反転多項式、相反多項式、初期内部状態、ビット反転魔法数を追加
|
data/README.ja.md
ADDED
@@ -0,0 +1,281 @@
|
|
1
|
+
|
2
|
+
# crc - CRC calcurator for ruby
|
3
|
+
|
4
|
+
これは Ruby 向けの汎用 CRC (巡回冗長検査; Cyclic Redundancy Check) 算出器です。
|
5
|
+
|
6
|
+
“Slicing by 8” アルゴリズムを基にした“バイトオーダーフリーの Slicing by 16 アルゴリズム” を 100% Ruby で記述しています。
|
7
|
+
|
8
|
+
CRC モデルとして CRC-32、CRC-32C、CRC-64-XZ、CRC-16、CRC-8-MAXIM、CRC-5-USB ほか多数が最初から組み込まれています。
|
9
|
+
|
10
|
+
利用者は、1〜64のビット幅、任意の多項式、および入出力のビット反射の有無に関してカスタマイズが可能です。
|
11
|
+
|
12
|
+
このライブラリは FreeBSD 10.3R amd64 上の zlib の `crc32()` よりも 85倍以上遅く、liblzma の `crc32()` よりも 120倍以上低速です。
|
13
|
+
|
14
|
+
さらに速度が必要な場合は、[crc-turbo](https://rubygems.org/gems/crc-turbo) と併用してください。
|
15
|
+
|
16
|
+
|
17
|
+
## API Guide
|
18
|
+
|
19
|
+
この例は CRC-32 モデル (`CRC::CRC32` クラス) を使用しています。
|
20
|
+
他の CRC モデルについては脳内変換して下さい。
|
21
|
+
|
22
|
+
### 即時的算出
|
23
|
+
|
24
|
+
* `CRC.crc32(seq, init = CRC::CRC32.initial_crc) => crc-32 integer` (likely as `Zlib.crc32`)
|
25
|
+
* `CRC.crc32.crc(seq, init = CRC::CRC32.initial_crc) => crc-32 integer` (likely as `Zlib.crc32`)
|
26
|
+
* `CRC.crc32.digest(seq, init = CRC::CRC32.initial_crc) => crc-32 digest` (likely as `Digest::XXXX.digest`)
|
27
|
+
* `CRC.crc32.hexdigest(seq, init = CRC::CRC32.initial_crc) -> crc-32 hex-digest` (likely as `Digest::XXXX.hexdigest`)
|
28
|
+
* `CRC.crc32[seq, init = CRC::CRC32.initial_crc, current_length = 0] -> crc-32 calcurator`
|
29
|
+
|
30
|
+
### 段階的算出 (ストリーミング)
|
31
|
+
|
32
|
+
* `CRC.crc32.new(init = 0, current_length = 0) => crc-32 calcurator`
|
33
|
+
* `CRC::CRC32#update(seq) => self` (likely as `Digest::XXXX.update`)
|
34
|
+
* `CRC::CRC32#finish => crc-32 integer` (likely as `Digest::XXXX.finish`)
|
35
|
+
* `CRC::CRC32#crc => crc-32 integer` (same as `CRC::CRC32#finish`)
|
36
|
+
* `CRC::CRC32#digest => crc-32 digest` (likely as `Digest::XXXX.digest`)
|
37
|
+
* `CRC::CRC32#hexdigest => crc-32 hex-digest` (likely as `Digest::XXXX.hexdigest`)
|
38
|
+
|
39
|
+
#### 例
|
40
|
+
|
41
|
+
``` ruby:ruby
|
42
|
+
x = CRC.crc32.new # => #<CRC::CRC32:00000000>
|
43
|
+
x.update "123" # => #<CRC::CRC32:884863D2>
|
44
|
+
x.update "456789" # => #<CRC::CRC32:CBF43926>
|
45
|
+
x.crc # => 3421780262
|
46
|
+
x.digest # => "\xCB\xF49&"
|
47
|
+
x.hexdigest # => "CBF43926"
|
48
|
+
```
|
49
|
+
|
50
|
+
### CRC 値の結合
|
51
|
+
|
52
|
+
- `CRC.combine(crc1, crc2, len2) => combined crc integer` (likely as `Zlib.crc32_comibne`)
|
53
|
+
- `CRC#+(right_crc) => combined crc calcurator`
|
54
|
+
|
55
|
+
`CRC.combine` は Mark Adler 氏による crccomb.c (<https://stackoverflow.com/questions/29915764/generic-crc-8-16-32-64-combine-implementation#29928573>) をそっくり~~パクった~~移植したものです。
|
56
|
+
|
57
|
+
#### 例1
|
58
|
+
|
59
|
+
``` ruby:ruby
|
60
|
+
CRC.crc32.combine(CRC.crc32("123"), CRC.crc32("456789"), 6) # => 3421780262
|
61
|
+
```
|
62
|
+
|
63
|
+
#### 例2
|
64
|
+
|
65
|
+
``` ruby:ruby
|
66
|
+
CRC.crc32["123"] + CRC.crc32["456"] + CRC.crc32["789"] # => #<CRC::CRC32:CBF43926>
|
67
|
+
```
|
68
|
+
|
69
|
+
### 利用者定義 CRC モデルの生成
|
70
|
+
|
71
|
+
* `CRC.new(bitsize, poly, initial_crc = 0, refin = true, refout = true, xor_output = ~0) => new crc model class`
|
72
|
+
|
73
|
+
#### 例
|
74
|
+
|
75
|
+
``` ruby:ruby
|
76
|
+
MyCRC32 = CRC.new(32, 0x04C11DB7)
|
77
|
+
MyCRC32.class # => Class
|
78
|
+
MyCRC32.hexdigest("123456789") # => "CBF43926"
|
79
|
+
MyCRC32["123456789"] # => #<MyCRC32:CBF43926>
|
80
|
+
```
|
81
|
+
|
82
|
+
### 逆進 CRC 値の算出
|
83
|
+
|
84
|
+
- `CRC::XXX.acrc(pre, post = nil, want_crc = 0) => arc-crc byte string`
|
85
|
+
|
86
|
+
#### 例
|
87
|
+
|
88
|
+
``` ruby:ruby
|
89
|
+
a = "12"
|
90
|
+
c = "789"
|
91
|
+
wantcrc = CRC.crc32("123456789")
|
92
|
+
b = CRC.crc32.acrc(a, c, wantcrc) # => "3456"
|
93
|
+
CRC.crc32[a + b + c] # => #<CRC::CRC32:CBF43926>
|
94
|
+
```
|
95
|
+
|
96
|
+
See CRC::Calcurate.acrc or below for more detail.
|
97
|
+
|
98
|
+
|
99
|
+
## 組み込み CRC モデル
|
100
|
+
|
101
|
+
```
|
102
|
+
$ rbcrc -lq
|
103
|
+
```
|
104
|
+
|
105
|
+
CRC-1, CRC-3-ROHC, CRC-4-INTERLAKEN, CRC-4-ITU, CRC-5-EPC, CRC-5-ITU, CRC-5-USB, CRC-6-CDMA2000-A, CRC-6-CDMA2000-B, CRC-6-DARC, CRC-6-ITU, CRC-7, CRC-7-ROHC, CRC-7-UMTS, CRC-8-CCITT, CRC-8-MAXIM, CRC-8-DARC, CRC-8-SAE, CRC-8-WCDMA, CRC-8-CDMA2000, CRC-8-DVB-S2, CRC-8-EBU, CRC-8-I-CODE, CRC-8-ITU, CRC-8-LTE, CRC-8-ROHC, CRC-10, CRC-10-CDMA2000, CRC-11, CRC-11-UMTS, CRC-12-CDMA2000, CRC-12-DECT, CRC-12-UMTS, CRC-13-BBC, CRC-14-DARC, CRC-15, CRC-15-MPT1327, CRC-16, CRC-16-AUG-CCITT, CRC-16-CDMA2000, CRC-16-DECT-R, CRC-16-DECT-X, CRC-16-T10-DIF, CRC-16-DNP, CRC-16-BUYPASS, CRC-16-CCITT-FALSE, CRC-16-DDS-110, CRC-16-EN-13757, CRC-16-GENIBUS, CRC-16-LJ1200, CRC-16-MAXIM, CRC-16-MCRF4XX, CRC-16-RIELLO, CRC-16-TELEDISK, CRC-16-TMS37157, CRC-16-USB, CRC-16-A, CRC-16-KERMIT, CRC-16-MODBUS, CRC-16-X-25, CRC-16-XMODEM, CRC-24-Radix-64, CRC-24-OPENPGP, CRC-24-BLE, CRC-24-FLEXRAY-A, CRC-24-FLEXRAY-B, CRC-24-INTERLAKEN, CRC-24-LTE-A, CRC-24-LTE-B, CRC-30-CDMA, CRC-31-PHILIPS, CRC-32, CRC-32-BZIP2, CRC-32C, CRC-32D, CRC-32-MPEG-2, CRC-32-POSIX, CRC-32Q, CRC-32-JAMCRC, CRC-32-XFER, CRC-40-GSM, CRC-64-XZ, CRC-64-JONES, CRC-64-ECMA, CRC-64-WE, CRC-64-ISO
|
106
|
+
|
107
|
+
|
108
|
+
## 環境変数
|
109
|
+
|
110
|
+
### `RUBY_CRC_NOFAST`
|
111
|
+
|
112
|
+
内部処理の実装を変更します。
|
113
|
+
|
114
|
+
- `RUBY_CRC_NOFAST=0`: 可能であれば "crc-turbo" を使います。ライブラリの読み込みが出来なければ、`RUBY_CRC_NOFAST=1` と同じ挙動になります。
|
115
|
+
- `RUBY_CRC_NOFAST=1`: Ruby で実装された“Slicing by 16”アルゴリズムの仕様を強制します。"crc-turbo" は使われません。
|
116
|
+
- `RUBY_CRC_NOFAST=2`: Dilip V. Sarwate 氏によるテーブルアルゴリズムに切り替えます。52% ほどに低速となります (CRC-32 の場合)。
|
117
|
+
- `RUBY_CRC_NOFAST=3`: ビット単位の計算アルゴリズムに切り替えます。`RUBY_CRC_NOFAST=1` と比較して 7% ほどに低速となります (CRC-32 の場合)。
|
118
|
+
|
119
|
+
|
120
|
+
## Source code generator for the specific CRC calcurator (from crc-0.3.1)
|
121
|
+
|
122
|
+
C・Ruby・javascript 向けの特化した CRC 算出器のソースコード生成機能があります。
|
123
|
+
|
124
|
+
アルゴリズムは Ruby および javascript の場合は“Slicing by 16”に限定されます。
|
125
|
+
|
126
|
+
Cの場合は、bit-by-bit, bit-by-bit-fast, halfbyte-table, standard-table, slicing-by-4, slicing-by-8, and slicing-by-16 を選択できます。
|
127
|
+
|
128
|
+
```
|
129
|
+
$ rbcrc --help
|
130
|
+
usage: rbcrc [options] output-filename...
|
131
|
+
-m crcname choose included crc name in library (``-l'' to print list)
|
132
|
+
-n crcname declare function name or class name [DEFAULT is filename]
|
133
|
+
-s bitsize declare crc bit size [REQUIRED for customized crc]
|
134
|
+
-p polynom declare crc polynomial [REQUIRED for customized crc]
|
135
|
+
-c initcrc declare initial crc (not internal state) [DEFAULT: 0]
|
136
|
+
-S initstate declare initial state (internal state) [DEFAULT: unset]
|
137
|
+
-x xormask declare xor bit mask for when output [DEFAULT: ~0]
|
138
|
+
-i reflect input [DEFAULT]
|
139
|
+
-I normal input (not reflect)
|
140
|
+
-o reflect output [DEFAULT]
|
141
|
+
-O normal output (not reflect)
|
142
|
+
-a algorithm switch algorithm (see below) (C file type only)
|
143
|
+
|
144
|
+
-l print crc names
|
145
|
+
-f force overwrite
|
146
|
+
-v increment verbosery level
|
147
|
+
-q quiet mode (reset verbosery level to zero)
|
148
|
+
|
149
|
+
About LICENSE for generated source code:
|
150
|
+
Generated code is under Creative Commons License Zero (CC0 / Public Domain).
|
151
|
+
See https://creativecommons.org/publicdomain/zero/1.0/
|
152
|
+
|
153
|
+
Algorithms (C file type only):
|
154
|
+
bit-by-bit, bit-by-bit-fast, halfbyte-table, standard-table,
|
155
|
+
slicing-by-4, slicing-by-8, slicing-by-16, slicing-by-{2..999}
|
156
|
+
|
157
|
+
Support export file types:
|
158
|
+
* .c for C (support C89, but required ``stdint.h'')
|
159
|
+
* .js for javascript (required ECMAScript 6th edition)
|
160
|
+
* .rb for ruby (for ruby-2.1+, jruby, and rubinius)
|
161
|
+
(executable for ruby-1.8, ruby-1.9 and ruby-2.0)
|
162
|
+
(executable for mruby and limitation bitsize by fixnum)
|
163
|
+
|
164
|
+
examples:
|
165
|
+
* create crc-32 calcurator to c source (and header file)
|
166
|
+
$ rbcrc crc32.c
|
167
|
+
|
168
|
+
* create crc-32c calcurator to ruby source
|
169
|
+
$ rbcrc crc32c.rb
|
170
|
+
|
171
|
+
* create crc-30-cdma calcurator to javascript source
|
172
|
+
$ rbcrc crc30cdma.js
|
173
|
+
|
174
|
+
* create crc-32 calcurator to ``crc.c'', ``crc.rb'' and ``crc.js''
|
175
|
+
$ rbcrc -mcrc32 crc.c crc.rb crc.js
|
176
|
+
|
177
|
+
* create customized crc calcurator (as mycrc function) to ``mycrc.c''
|
178
|
+
$ rbcrc -s15 -p0x6789 -io -x~0 mycrc.c
|
179
|
+
|
180
|
+
* create customized crc calcurator (as MyCRC class) to ``mycrc_1.rb''
|
181
|
+
$ rbcrc -s39 -p0x987654321 -IO -x1 -nMyCRC mycrc_1.rb
|
182
|
+
```
|
183
|
+
|
184
|
+
- - - -
|
185
|
+
|
186
|
+
また、このコマンドには各 CRC 仕様を YAML 形式で出力する機能もあります。
|
187
|
+
|
188
|
+
``` text
|
189
|
+
$ rbcrc -lvv
|
190
|
+
...snip...
|
191
|
+
"CRC-32":
|
192
|
+
bitsize: 32
|
193
|
+
polynomial: 0x04C11DB7 # 0xEDB88320 (bit reflected)
|
194
|
+
reversed reciprocal: 0x82608EDB # 0xDB710641 (bit reflected)
|
195
|
+
reflect input: true
|
196
|
+
reflect output: true
|
197
|
+
initial crc: 0x00000000 # 0xFFFFFFFF (initial state)
|
198
|
+
xor output: 0xFFFFFFFF
|
199
|
+
magic number: 0x2144DF1C # 0xDEBB20E3 (internal state)
|
200
|
+
another names:
|
201
|
+
- "CRC-32-ADCCP"
|
202
|
+
- "CRC-32-PKZIP"
|
203
|
+
- "PKZIP"
|
204
|
+
...snip...
|
205
|
+
```
|
206
|
+
|
207
|
+
|
208
|
+
## CRC の逆算 (arc-crc)
|
209
|
+
|
210
|
+
crc-0.4 にて、任意の CRC となるバイト列を逆算する機能が正式に追加されました。
|
211
|
+
|
212
|
+
`require "crc/acrc"` にて、その機能が利用可能となります。
|
213
|
+
|
214
|
+
名前の由来は、arc-sin などの C 関数である asin と同様に、arc-crc => acrc となっています。
|
215
|
+
|
216
|
+
以下は使用例です。
|
217
|
+
|
218
|
+
* 文字列 "123456789????" を CRC32 した場合に 0 となるような、???? の部分を逆算する
|
219
|
+
|
220
|
+
``` ruby:ruby
|
221
|
+
require "crc/acrc"
|
222
|
+
|
223
|
+
seq = "123456789"
|
224
|
+
seq << CRC.crc32.acrc(seq)
|
225
|
+
p CRC.crc32[seq] # => #<CRC::CRC32:00000000>
|
226
|
+
```
|
227
|
+
|
228
|
+
* 文字列 "123456789????ABCDEFG" の、???? の部分を逆算する
|
229
|
+
|
230
|
+
``` ruby:ruby
|
231
|
+
require "crc/acrc"
|
232
|
+
|
233
|
+
seq1 = "123456789"
|
234
|
+
seq2 = "ABCDEFG"
|
235
|
+
seq = seq1 + CRC.crc32.acrc(seq1, seq2) + seq2
|
236
|
+
p CRC.crc32[seq] # => #<CRC::CRC32:00000000>
|
237
|
+
```
|
238
|
+
|
239
|
+
* 文字列 "123456789????ABCDEFG" を CRC32 した場合に 0x12345678 となるような、???? の部分を逆算する
|
240
|
+
|
241
|
+
``` ruby:ruby
|
242
|
+
require "crc/acrc"
|
243
|
+
|
244
|
+
seq1 = "123456789"
|
245
|
+
seq2 = "ABCDEFG"
|
246
|
+
target_crc = 0x12345678
|
247
|
+
seq = seq1 + CRC.crc32.acrc(seq1, seq2, target_crc) + seq2
|
248
|
+
p CRC.crc32[seq] # => #<CRC::CRC32:12345678>
|
249
|
+
```
|
250
|
+
|
251
|
+
* 独自仕様の CRC モジュールにも対応
|
252
|
+
|
253
|
+
``` ruby:ruby
|
254
|
+
require "crc/acrc"
|
255
|
+
|
256
|
+
seq1 = "123456789"
|
257
|
+
seq2 = "ABCDEFG"
|
258
|
+
target_crc = 0x12345678
|
259
|
+
MyCRC = CRC.new(29, rand(1 << 29) | 1)
|
260
|
+
seq = seq1 + MyCRC.acrc(seq1, seq2, target_crc) + seq2
|
261
|
+
p MyCRC[seq] # => #<MyCRC:12345678>
|
262
|
+
```
|
263
|
+
|
264
|
+
|
265
|
+
## 諸元
|
266
|
+
|
267
|
+
- package name: crc
|
268
|
+
- author: dearblue (mailto:dearblue@users.noreply.github.com)
|
269
|
+
- report issue to: <https://github.com/dearblue/ruby-crc/issues>
|
270
|
+
- how to install: `gem install crc`
|
271
|
+
- version: 0.4.1
|
272
|
+
- production quality: TECHNICAL PREVIEW
|
273
|
+
- licensing:
|
274
|
+
- ***2 clause BSD License: MAIN LICENSE***
|
275
|
+
- zlib-style License: `lib/crc/_combine.rb`
|
276
|
+
- Creative Commons License Zero (CC0 / Public Domain): `lib/crc/_byruby.rb`, `lib/crc/_models.rb`
|
277
|
+
- dependency gems: none
|
278
|
+
- dependency external C libraries: none
|
279
|
+
- bundled external C libraries: none
|
280
|
+
- installed executable file:
|
281
|
+
- `rbcrc`: CRC calcuration source code generator for c, ruby and javascript
|
data/README.md
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
|
2
|
-
# crc - CRC
|
2
|
+
# crc - CRC calculator for ruby
|
3
3
|
|
4
|
-
This is a
|
4
|
+
This is a generic CRC (Cyclic Redundancy Check) calculator for ruby.
|
5
5
|
|
6
6
|
It is written by pure ruby with based on slice-by-eight algorithm (slice-by-16 algorithm with byte-order free).
|
7
7
|
|
8
|
-
Included built-in CRC
|
8
|
+
Included built-in CRC models are CRC-32, CRC-32C, CRC-64-XZ, CRC-16, CRC-8-MAXIM, CRC-5-USB and many more.
|
9
9
|
|
10
10
|
Customization is posible for 1 to 64 bit width, any polynomials, and with/without bit reflection input/output.
|
11
11
|
|
12
12
|
This library is slower than ×85+ of zlib/crc32, and slower than ×120+ of extlzma/crc32 on FreeBSD 10.3R amd64.
|
13
13
|
|
14
|
-
If you need more speed, please use with [crc-turbo](https://rubygems/gems/crc-turbo).
|
14
|
+
If you need more speed, please use with [crc-turbo](https://rubygems.org/gems/crc-turbo).
|
15
15
|
|
16
16
|
|
17
17
|
## Summary
|
@@ -20,34 +20,34 @@ If you need more speed, please use with [crc-turbo](https://rubygems/gems/crc-tu
|
|
20
20
|
* author: dearblue (mailto:dearblue@users.noreply.github.com)
|
21
21
|
* report issue to: <https://github.com/dearblue/ruby-crc/issues>
|
22
22
|
* how to install: ``gem install crc``
|
23
|
-
* version: 0.4.
|
23
|
+
* version: 0.4.2
|
24
24
|
* production quality: TECHNICAL PREVIEW
|
25
25
|
* licensing:
|
26
26
|
* ***BSD-2-Clause : MAIN LICENSE***
|
27
27
|
* zlib-style License : ``lib/crc/_combine.rb``
|
28
|
-
* Creative Commons License Zero (CC0 / Public Domain) : ``lib/crc/_byruby.rb``, ``lib/crc/
|
28
|
+
* Creative Commons License Zero (CC0 / Public Domain) : ``lib/crc/_byruby.rb``, ``lib/crc/_models.rb``
|
29
29
|
* dependency gems: none
|
30
30
|
* dependency external C libraries: none
|
31
31
|
* bundled external C libraries: none
|
32
32
|
* installed executable file:
|
33
|
-
* rbcrc: CRC
|
33
|
+
* rbcrc: CRC calculation source code generator for c, ruby and javascript
|
34
34
|
|
35
35
|
|
36
36
|
## API Guide
|
37
37
|
|
38
|
-
This examples are used CRC-32
|
38
|
+
This examples are used CRC-32 model. Please see CRC for more details.
|
39
39
|
|
40
|
-
###
|
40
|
+
### Calculate by direct
|
41
41
|
|
42
42
|
* ``CRC.crc32(seq, init = CRC::CRC32.initial_crc) => crc-32 integer`` (likely as ``Zlib.crc32``)
|
43
43
|
* ``CRC.crc32.crc(seq, init = CRC::CRC32.initial_crc) => crc-32 integer`` (likely as ``Zlib.crc32``)
|
44
44
|
* ``CRC.crc32.digest(seq, init = CRC::CRC32.initial_crc) => crc-32 digest`` (likely as ``Digest::XXXX.digest``)
|
45
45
|
* ``CRC.crc32.hexdigest(seq, init = CRC::CRC32.initial_crc) -> crc-32 hex-digest`` (likely as ``Digest::XXXX.hexdigest``)
|
46
|
-
* ``CRC.crc32[seq, init = CRC::CRC32.initial_crc, current_length = 0] -> crc-32
|
46
|
+
* ``CRC.crc32[seq, init = CRC::CRC32.initial_crc, current_length = 0] -> crc-32 calculator``
|
47
47
|
|
48
|
-
###
|
48
|
+
### Calculate by streaming
|
49
49
|
|
50
|
-
* ``CRC.crc32.new(init = 0, current_length = 0) => crc-32
|
50
|
+
* ``CRC.crc32.new(init = 0, current_length = 0) => crc-32 calculator``
|
51
51
|
* ``CRC::CRC32#update(seq) => self`` (likely as ``Digest::XXXX.update``)
|
52
52
|
* ``CRC::CRC32#finish => crc-32 integer`` (likely as ``Digest::XXXX.finish``)
|
53
53
|
* ``CRC::CRC32#crc => crc-32 integer`` (same as ``CRC::CRC32#finish``)
|
@@ -68,7 +68,7 @@ x.hexdigest # => "CBF43926"
|
|
68
68
|
### Combine
|
69
69
|
|
70
70
|
* ``CRC.combine(crc1, crc2, len2) => combined crc integer`` (likely as ``Zlib.crc32_comibne``)
|
71
|
-
* ``CRC#+(right_crc) => combined crc
|
71
|
+
* ``CRC#+(right_crc) => combined crc calculator``
|
72
72
|
|
73
73
|
Example-1 ::
|
74
74
|
|
@@ -82,9 +82,9 @@ Example-2 ::
|
|
82
82
|
CRC.crc32["123"] + CRC.crc32["456"] + CRC.crc32["789"] # => #<CRC::CRC32:CBF43926>
|
83
83
|
```
|
84
84
|
|
85
|
-
### Create customized crc
|
85
|
+
### Create customized crc model
|
86
86
|
|
87
|
-
* ``CRC.new(bitsize, poly, initial_crc = 0, refin = true, refout = true, xor_output = ~0) => new crc
|
87
|
+
* ``CRC.new(bitsize, poly, initial_crc = 0, refin = true, refout = true, xor_output = ~0) => new crc model class``
|
88
88
|
|
89
89
|
Example ::
|
90
90
|
|
@@ -95,7 +95,7 @@ MyCRC32.hexdigest("123456789") # => "CBF43926"
|
|
95
95
|
MyCRC32["123456789"] # => #<MyCRC32:CBF43926>
|
96
96
|
```
|
97
97
|
|
98
|
-
###
|
98
|
+
### Calculate arc-crc
|
99
99
|
|
100
100
|
* ``CRC::XXX.acrc(pre, post = nil, want_crc = 0) => arc-crc byte string``
|
101
101
|
|
@@ -109,10 +109,10 @@ b = CRC.crc32.acrc(a, c, wantcrc) # => "3456"
|
|
109
109
|
CRC.crc32[a + b + c] # => #<CRC::CRC32:CBF43926>
|
110
110
|
```
|
111
111
|
|
112
|
-
See CRC::
|
112
|
+
See CRC::Calculate.acrc or below for more detail.
|
113
113
|
|
114
114
|
|
115
|
-
## Built-in CRC
|
115
|
+
## Built-in CRC models
|
116
116
|
|
117
117
|
```
|
118
118
|
$ rbcrc -lq
|
@@ -134,9 +134,9 @@ CRC-1, CRC-3-ROHC, CRC-4-INTERLAKEN, CRC-4-ITU, CRC-5-EPC, CRC-5-ITU, CRC-5-USB,
|
|
134
134
|
CRC.combine is ported from Mark Adler's crccomb.c in <https://stackoverflow.com/questions/29915764/generic-crc-8-16-32-64-combine-implementation#29928573>.
|
135
135
|
|
136
136
|
|
137
|
-
## Source code generator for the specific CRC
|
137
|
+
## Source code generator for the specific CRC calculator (from crc-0.3.1)
|
138
138
|
|
139
|
-
Add source code generator for the specific CRC
|
139
|
+
Add source code generator for the specific CRC calculator to c, ruby, and javascript.
|
140
140
|
|
141
141
|
Algorithm is slicing-by-16 only for ruby and javascript.
|
142
142
|
|
@@ -180,22 +180,22 @@ Support export file types:
|
|
180
180
|
(executable for mruby and limitation bitsize by fixnum)
|
181
181
|
|
182
182
|
examples:
|
183
|
-
* create crc-32
|
183
|
+
* create crc-32 calculator to c source (and header file)
|
184
184
|
$ rbcrc crc32.c
|
185
185
|
|
186
|
-
* create crc-32c
|
186
|
+
* create crc-32c calculator to ruby source
|
187
187
|
$ rbcrc crc32c.rb
|
188
188
|
|
189
|
-
* create crc-30-cdma
|
189
|
+
* create crc-30-cdma calculator to javascript source
|
190
190
|
$ rbcrc crc30cdma.js
|
191
191
|
|
192
|
-
* create crc-32
|
192
|
+
* create crc-32 calculator to ``crc.c'', ``crc.rb'' and ``crc.js''
|
193
193
|
$ rbcrc -mcrc32 crc.c crc.rb crc.js
|
194
194
|
|
195
|
-
* create customized crc
|
195
|
+
* create customized crc calculator (as mycrc function) to ``mycrc.c''
|
196
196
|
$ rbcrc -s15 -p0x6789 -io -x~0 mycrc.c
|
197
197
|
|
198
|
-
* create customized crc
|
198
|
+
* create customized crc calculator (as MyCRC class) to ``mycrc_1.rb''
|
199
199
|
$ rbcrc -s39 -p0x987654321 -IO -x1 -nMyCRC mycrc_1.rb
|
200
200
|
```
|
201
201
|
|
data/bin/rbcrc
CHANGED
@@ -108,22 +108,22 @@ Support export file types:
|
|
108
108
|
(executable for mruby and limitation bitsize by fixnum)
|
109
109
|
|
110
110
|
examples:
|
111
|
-
* create crc-32
|
111
|
+
* create crc-32 calculator to c source (and header file)
|
112
112
|
$ rbcrc crc32.c
|
113
113
|
|
114
|
-
* create crc-32c
|
114
|
+
* create crc-32c calculator to ruby source
|
115
115
|
$ rbcrc crc32c.rb
|
116
116
|
|
117
|
-
* create crc-30-cdma
|
117
|
+
* create crc-30-cdma calculator to javascript source
|
118
118
|
$ rbcrc crc30cdma.js
|
119
119
|
|
120
|
-
* create crc-32
|
120
|
+
* create crc-32 calculator to ``crc.c'', ``crc.rb'' and ``crc.js''
|
121
121
|
$ rbcrc -mcrc32 crc.c crc.rb crc.js
|
122
122
|
|
123
|
-
* create customized crc
|
123
|
+
* create customized crc calculator (as mycrc function) to ``mycrc.c''
|
124
124
|
$ rbcrc -s15 -p0x6789 -io -x~0 mycrc.c
|
125
125
|
|
126
|
-
* create customized crc
|
126
|
+
* create customized crc calculator (as MyCRC class) to ``mycrc_1.rb''
|
127
127
|
$ rbcrc -s39 -p0x987654321 -IO -x1 -nMyCRC mycrc_1.rb
|
128
128
|
EOS
|
129
129
|
|
data/gemstub.rb
CHANGED
@@ -9,9 +9,9 @@ ver = $1
|
|
9
9
|
GEMSTUB = Gem::Specification.new do |s|
|
10
10
|
s.name = "crc"
|
11
11
|
s.version = ver
|
12
|
-
s.summary = "
|
12
|
+
s.summary = "generic CRC calculator"
|
13
13
|
s.description = <<EOS
|
14
|
-
Pure ruby implemented
|
14
|
+
Pure ruby implemented generic CRC (Cyclic Redundancy Check) calculator.
|
15
15
|
Customization is posible for 1 to 64 bit width, any polynomials, and with/without bit reflection input/output.
|
16
16
|
If you need more speed, please use crc-turbo.
|
17
17
|
EOS
|
data/lib/crc.rb
CHANGED
@@ -17,15 +17,15 @@ end
|
|
17
17
|
require_relative "crc/version"
|
18
18
|
|
19
19
|
#
|
20
|
-
# This is a
|
20
|
+
# This is a generic CRC calculator.
|
21
21
|
#
|
22
|
-
# When you want to use CRC-32
|
22
|
+
# When you want to use CRC-32 model, there are following ways:
|
23
23
|
#
|
24
|
-
# 1.
|
24
|
+
# 1. Calculate CRC-32'd value at direct:
|
25
25
|
#
|
26
26
|
# CRC.crc32("123456789") # => 3421780262
|
27
27
|
#
|
28
|
-
# 2.
|
28
|
+
# 2. Calculate CRC-32'd hex-digest at direct:
|
29
29
|
#
|
30
30
|
# CRC::CRC32.hexdigest("123456789") # => "CBF43926"
|
31
31
|
#
|
@@ -51,7 +51,7 @@ class CRC
|
|
51
51
|
|
52
52
|
using Extensions
|
53
53
|
|
54
|
-
module
|
54
|
+
module Calculator
|
55
55
|
def [](seq, *args)
|
56
56
|
c = new(*args)
|
57
57
|
c.update(seq) if seq
|
@@ -157,20 +157,20 @@ class CRC
|
|
157
157
|
# initialize(initial_crc = nil, size = 0)
|
158
158
|
#
|
159
159
|
def initialize(initial_crc = nil, size = 0)
|
160
|
-
m =
|
160
|
+
m = get_crc_model
|
161
161
|
@state = m.setup((initial_crc || m.initial_crc).to_i)
|
162
162
|
@size = size.to_i
|
163
163
|
end
|
164
164
|
|
165
165
|
def reset(initial_crc = nil, size = 0)
|
166
|
-
m =
|
166
|
+
m = get_crc_model
|
167
167
|
@state = m.setup((initial_crc || m.initial_crc).to_i)
|
168
168
|
@size = size.to_i
|
169
169
|
self
|
170
170
|
end
|
171
171
|
|
172
172
|
def update(seq)
|
173
|
-
@state =
|
173
|
+
@state = get_crc_model.update(seq, state)
|
174
174
|
@size += seq.bytesize
|
175
175
|
self
|
176
176
|
end
|
@@ -178,15 +178,15 @@ class CRC
|
|
178
178
|
alias << update
|
179
179
|
|
180
180
|
def crc
|
181
|
-
|
181
|
+
get_crc_model.finish(state)
|
182
182
|
end
|
183
183
|
|
184
184
|
def +(crc2)
|
185
|
-
m1 =
|
186
|
-
m2 = crc2.
|
185
|
+
m1 = get_crc_model
|
186
|
+
m2 = crc2.get_crc_model
|
187
187
|
raise ArgumentError, "not a CRC instance (#{crc2.inspect})" unless m2
|
188
188
|
unless m2.variant_for?(m1)
|
189
|
-
raise ArgumentError, "different CRC
|
189
|
+
raise ArgumentError, "different CRC model (#{m1.inspect} and #{m2.inspect})"
|
190
190
|
end
|
191
191
|
m1.new(m1.combine(crc, crc2.crc, crc2.size), size + crc2.size)
|
192
192
|
end
|
@@ -214,66 +214,70 @@ class CRC
|
|
214
214
|
end
|
215
215
|
|
216
216
|
def digest
|
217
|
-
Aux.digest(crc,
|
217
|
+
Aux.digest(crc, get_crc_model.bitsize)
|
218
218
|
end
|
219
219
|
|
220
220
|
# return digest as internal state
|
221
221
|
def digest!
|
222
|
-
Aux.digest(state,
|
222
|
+
Aux.digest(state, get_crc_model.bitsize)
|
223
223
|
end
|
224
224
|
|
225
225
|
def hexdigest
|
226
|
-
Aux.hexdigest(crc,
|
226
|
+
Aux.hexdigest(crc, get_crc_model.bitsize)
|
227
227
|
end
|
228
228
|
|
229
229
|
# return hex-digest as internal state
|
230
230
|
def hexdigest!
|
231
|
-
Aux.hexdigest(state,
|
231
|
+
Aux.hexdigest(state, get_crc_model.bitsize)
|
232
232
|
end
|
233
233
|
|
234
234
|
alias to_str hexdigest
|
235
235
|
alias to_s hexdigest
|
236
236
|
|
237
237
|
def inspect
|
238
|
-
"\#<#{
|
238
|
+
"\#<#{get_crc_model}:#{hexdigest}>"
|
239
239
|
end
|
240
240
|
|
241
241
|
def pretty_inspect(q)
|
242
242
|
q.text inspect
|
243
243
|
end
|
244
244
|
|
245
|
-
|
245
|
+
MODEL_TABLE = {}
|
246
246
|
|
247
247
|
class << self
|
248
|
-
def lookup(
|
249
|
-
|
250
|
-
|
251
|
-
|
248
|
+
def lookup(modelname)
|
249
|
+
modelname1 = modelname.to_s.gsub(/[\W_]+/, "")
|
250
|
+
modelname1.downcase!
|
251
|
+
MODEL_TABLE[modelname1] or raise NameError, "modelname is not matched (for #{modelname})"
|
252
252
|
end
|
253
253
|
|
254
254
|
alias [] lookup
|
255
255
|
|
256
|
-
def crc(
|
257
|
-
lookup(
|
256
|
+
def crc(modelname, seq, crc = nil)
|
257
|
+
lookup(modelname).crc(seq, crc)
|
258
258
|
end
|
259
259
|
|
260
|
-
def digest(
|
261
|
-
lookup(
|
260
|
+
def digest(modelname, seq, crc = nil)
|
261
|
+
lookup(modelname).digest(seq, crc)
|
262
262
|
end
|
263
263
|
|
264
|
-
def hexdigest(
|
265
|
-
lookup(
|
264
|
+
def hexdigest(modelname, seq, crc = nil)
|
265
|
+
lookup(modelname).hexdigest(seq, crc)
|
266
266
|
end
|
267
267
|
end
|
268
268
|
|
269
|
-
|
269
|
+
# NOTE: "Calcurator" は typo ですが、後方互換のため一時的に残します。
|
270
|
+
# TODO: CRC::Calcurator はいずれ削除されます。
|
271
|
+
CRC::Calcurator = CRC::Calculator
|
272
|
+
|
273
|
+
require_relative "crc/_models"
|
270
274
|
require_relative "crc/_combine"
|
271
275
|
require_relative "crc/_shift"
|
272
276
|
require_relative "crc/_magic"
|
273
277
|
require_relative "crc/_file"
|
274
278
|
|
275
279
|
#
|
276
|
-
# Create CRC
|
280
|
+
# Create CRC model classes.
|
277
281
|
#
|
278
282
|
LIST.each do |bitsize, polynomial, refin, refout, initial_crc, xor, check, *names|
|
279
283
|
names.flatten!
|
@@ -284,10 +288,10 @@ class CRC
|
|
284
288
|
|
285
289
|
names.each do |nm|
|
286
290
|
nm1 = nm.downcase.gsub(/[\W_]+/, "")
|
287
|
-
if
|
288
|
-
raise NameError, "collision crc-
|
291
|
+
if MODEL_TABLE.key?(nm1)
|
292
|
+
raise NameError, "collision crc-model name: #{nm} ({#{crc.to_str}} and {#{MODEL_TABLE[nm1].to_str}})"
|
289
293
|
end
|
290
|
-
|
294
|
+
MODEL_TABLE[nm1] = crc
|
291
295
|
|
292
296
|
name = nm.sub(/(?<=\bCRC)-(?=\d+)/, "").gsub(/[\W]+/, "_")
|
293
297
|
const_set(name, crc)
|
data/lib/crc/_byruby.rb
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
#
|
10
10
|
# \* \* \* \* \* \* \* \*
|
11
11
|
#
|
12
|
-
# Pure ruby implemented
|
12
|
+
# Pure ruby implemented generic CRC calculator.
|
13
13
|
# It's used slice-by-16 algorithm with byte-order free.
|
14
14
|
# This is based on the Intel's slice-by-eight algorithm.
|
15
15
|
#
|
@@ -27,8 +27,8 @@ class CRC
|
|
27
27
|
class << self
|
28
28
|
#
|
29
29
|
# call-seq:
|
30
|
-
# new(bitsize, polynomial, initial_crc = 0, reflect_input = true, reflect_output = true, xor_output = ~0, name = nil) -> new crc
|
31
|
-
# new(initial_crc = nil, size = 0) -> new crc
|
30
|
+
# new(bitsize, polynomial, initial_crc = 0, reflect_input = true, reflect_output = true, xor_output = ~0, name = nil) -> new crc model class (CRC based class)
|
31
|
+
# new(initial_crc = nil, size = 0) -> new crc calculator (CRC instance)
|
32
32
|
#
|
33
33
|
def new(bitsize, polynomial, initial_crc = 0, reflect_input = true, reflect_output = true, xor_output = ~0, name = nil)
|
34
34
|
bitsize = bitsize.to_i
|
@@ -56,7 +56,7 @@ class CRC
|
|
56
56
|
# CRC クラスを普通に派生させた場合でも、CRC.new の基底メソッドが呼ばれるための細工
|
57
57
|
define_singleton_method(:new, &Class.instance_method(:new).bind(self))
|
58
58
|
|
59
|
-
extend CRC::
|
59
|
+
extend CRC::Calculator
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
@@ -254,7 +254,7 @@ class CRC
|
|
254
254
|
end
|
255
255
|
end
|
256
256
|
|
257
|
-
module
|
257
|
+
module Calculator
|
258
258
|
attr_reader :bitsize, :bitmask, :polynomial, :initial_crc,
|
259
259
|
:reflect_input, :reflect_output, :xor_output, :name
|
260
260
|
|
data/lib/crc/_extensions.rb
CHANGED
@@ -91,7 +91,7 @@ class CRC
|
|
91
91
|
refine CRC do
|
92
92
|
def convert_internal_state_for(crc)
|
93
93
|
unless crc.variant?(self)
|
94
|
-
raise "not variant crc
|
94
|
+
raise "not variant crc model (expect #{crc.to_s}, but self is #{inspect})"
|
95
95
|
end
|
96
96
|
|
97
97
|
state
|
@@ -99,7 +99,7 @@ class CRC
|
|
99
99
|
|
100
100
|
def convert_target_state_for(crc)
|
101
101
|
unless crc.variant?(self)
|
102
|
-
raise "not variant crc
|
102
|
+
raise "not variant crc model (expect #{crc.to_s}, but self is #{inspect})"
|
103
103
|
end
|
104
104
|
|
105
105
|
state
|
@@ -168,12 +168,12 @@ class CRC
|
|
168
168
|
end
|
169
169
|
|
170
170
|
# refinements:
|
171
|
-
# *
|
171
|
+
# * get_crc_model
|
172
172
|
# * variant_for?
|
173
173
|
;
|
174
174
|
|
175
175
|
refine BasicObject do
|
176
|
-
def
|
176
|
+
def get_crc_model
|
177
177
|
nil
|
178
178
|
end
|
179
179
|
|
@@ -183,18 +183,18 @@ class CRC
|
|
183
183
|
end
|
184
184
|
|
185
185
|
refine CRC do
|
186
|
-
alias
|
186
|
+
alias get_crc_model class
|
187
187
|
|
188
188
|
def variant_for?(m)
|
189
|
-
|
189
|
+
get_crc_model.variant_for?(m)
|
190
190
|
end
|
191
191
|
end
|
192
192
|
|
193
193
|
refine CRC.singleton_class do
|
194
|
-
alias
|
194
|
+
alias get_crc_model itself
|
195
195
|
|
196
196
|
def variant_for?(m)
|
197
|
-
return false unless m = m.
|
197
|
+
return false unless m = m.get_crc_model
|
198
198
|
|
199
199
|
if bitsize == m.bitsize &&
|
200
200
|
polynomial == m.polynomial &&
|
data/lib/crc/_file.rb
CHANGED
data/lib/crc/_magic.rb
CHANGED
@@ -35,8 +35,8 @@ class CRC
|
|
35
35
|
|
36
36
|
refine CRC do
|
37
37
|
def to_magicdigest_for(m)
|
38
|
-
unless m.variant?(
|
39
|
-
raise TypeError, "different crc type - #{
|
38
|
+
unless m.variant?(get_crc_model)
|
39
|
+
raise TypeError, "different crc type - #{get_crc_model.inspect} (expect #{m.inspect})", caller
|
40
40
|
end
|
41
41
|
|
42
42
|
magicdigest
|
@@ -45,7 +45,7 @@ class CRC
|
|
45
45
|
|
46
46
|
refine BasicObject do
|
47
47
|
def to_magicdigest_for(m)
|
48
|
-
raise TypeError, "cant convert type - #{
|
48
|
+
raise TypeError, "cant convert type - #{get_crc_model}", caller
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
@@ -60,7 +60,7 @@ class CRC
|
|
60
60
|
|
61
61
|
using CRC::Extensions
|
62
62
|
|
63
|
-
module
|
63
|
+
module Calculator
|
64
64
|
def magicnumber
|
65
65
|
@magicnumber = crc(__cached_magic_code__)
|
66
66
|
singleton_class.class_eval { attr_reader :magicnumber }
|
@@ -88,6 +88,6 @@ class CRC
|
|
88
88
|
end
|
89
89
|
|
90
90
|
def magicdigest
|
91
|
-
crc.to_magicdigest_for(
|
91
|
+
crc.to_magicdigest_for(get_crc_model)
|
92
92
|
end
|
93
93
|
end
|
@@ -78,11 +78,11 @@ class CRC
|
|
78
78
|
[16, 0x6F63, false, false, 0, 0, 0xBDF4, "CRC-16-LJ1200"],
|
79
79
|
[16, 0x8005, true, true, ~0, ~0, 0x44C2, "CRC-16-MAXIM"],
|
80
80
|
[16, 0x1021, true, true, ~0, 0, 0x6F91, "CRC-16-MCRF4XX"],
|
81
|
-
[16, 0x1021, true, true,
|
81
|
+
[16, 0x1021, true, true, 0x554D, 0, 0x63D0, "CRC-16-RIELLO"],
|
82
82
|
[16, 0xA097, false, false, 0, 0, 0x0FB3, "CRC-16-TELEDISK"],
|
83
|
-
[16, 0x1021, true, true,
|
83
|
+
[16, 0x1021, true, true, 0x3791, 0, 0x26B1, "CRC-16-TMS37157"],
|
84
84
|
[16, 0x8005, true, true, 0, ~0, 0xB4C8, "CRC-16-USB"],
|
85
|
-
[16, 0x1021, true, true,
|
85
|
+
[16, 0x1021, true, true, 0x6363, 0, 0xBF05, "CRC-16-A", "CRC-A", "CRC-16-ISO/IEC FCD 14443-3"],
|
86
86
|
[16, 0x1021, true, true, 0, 0, 0x2189, "CRC-16-KERMIT", "KERMIT", "CRC-16-CCITT", "CRC-16-CCITT-TRUE", "CRC-CCITT"],
|
87
87
|
[16, 0x8005, true, true, ~0, 0, 0x4B37, "CRC-16-MODBUS", "MODBUS"],
|
88
88
|
[16, 0x1021, true, true, 0, ~0, 0x906E, "CRC-16-X-25", "X-25", "CRC-16-IBM-SDLC", "CRC-16-ISO-HDLC", "CRC-16-CRC-B", "CRC-B"],
|
@@ -92,7 +92,7 @@ class CRC
|
|
92
92
|
#[24, 0x005D6DCB, false, false, 0, 0, nil, "CRC-24"],
|
93
93
|
[24, 0x00864CFB, false, false, 0, 0, 0x00CDE703, "CRC-24-Radix-64"],
|
94
94
|
[24, 0x00864CFB, false, false, 0x00B704CE, 0, 0x0021CF02, "CRC-24-OPENPGP"],
|
95
|
-
[24, 0x0000065B, true, true,
|
95
|
+
[24, 0x0000065B, true, true, 0x00AAAAAA, 0, 0x00C25A56, "CRC-24-BLE"],
|
96
96
|
[24, 0x005D6DCB, false, false, 0x00FEDCBA, 0, 0x007979BD, "CRC-24-FLEXRAY-A"],
|
97
97
|
[24, 0x005D6DCB, false, false, 0x00ABCDEF, 0, 0x001F23B8, "CRC-24-FLEXRAY-B"],
|
98
98
|
[24, 0x00328B63, false, false, 0, ~0, 0x00B4F3E6, "CRC-24-INTERLAKEN"],
|
data/lib/crc/_shift.rb
CHANGED
data/lib/crc/acrc.rb
CHANGED
data/lib/crc/version.rb
CHANGED
data/test/common.rb
CHANGED
@@ -7,14 +7,14 @@ require "optparse"
|
|
7
7
|
alltest = false
|
8
8
|
opt = OptionParser.new(nil, 12, " ")
|
9
9
|
opt.instance_eval do
|
10
|
-
on("--all", "test all crc
|
10
|
+
on("--all", "test all crc models") { alltest = true }
|
11
11
|
order!
|
12
12
|
end
|
13
13
|
|
14
14
|
if alltest
|
15
|
-
$
|
15
|
+
$testmodels = CRC::MODEL_TABLE.values.uniq
|
16
16
|
else
|
17
|
-
$
|
17
|
+
$testmodels = %w(
|
18
18
|
CRC-32 CRC-32-POSIX CRC-64 CRC-64-ECMA
|
19
19
|
CRC-3-ROHC CRC-5-USB CRC-7-ROHC CRC-7-UMTS CRC-8-CCITT CRC-8-MAXIM
|
20
20
|
CRC-15 CRC-16 CRC-16-XMODEM CRC-24-OPENPGP CRC-24-BLE CRC-31-PHILIPS
|
data/test/self_check.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require "crc"
|
2
2
|
|
3
|
-
$stderr.puts "#{__FILE__}:#{__LINE__}: SELF CHECK for CRC
|
3
|
+
$stderr.puts "#{__FILE__}:#{__LINE__}: SELF CHECK for CRC models (#{File.basename($".grep(/_(?:byruby|turbo)/)[0]||"")})\n"
|
4
4
|
|
5
5
|
class CRC
|
6
|
-
|
6
|
+
MODEL_TABLE.values.uniq.each do |crc|
|
7
7
|
check = crc::CHECK
|
8
8
|
checked = crc.crc("123456789")
|
9
9
|
case check
|
data/test/test_arc.rb
CHANGED
data/test/test_block.rb
CHANGED
@@ -5,7 +5,7 @@ require "crc"
|
|
5
5
|
require_relative "common"
|
6
6
|
|
7
7
|
class TestCRC < Test::Unit::TestCase
|
8
|
-
$
|
8
|
+
$testmodels.each do |crc|
|
9
9
|
next unless crc.const_defined?(:CHECK) && crc::CHECK
|
10
10
|
class_eval(<<-"EOS", __FILE__, __LINE__ + 1)
|
11
11
|
def test_block_#{crc.to_s.slice(/\w+$/)}
|
data/test/test_magic.rb
CHANGED
@@ -5,7 +5,7 @@ require "crc"
|
|
5
5
|
require_relative "common"
|
6
6
|
|
7
7
|
class TestCRCMagic < Test::Unit::TestCase
|
8
|
-
$
|
8
|
+
$testmodels.each do |crc|
|
9
9
|
next unless crc.const_defined?(:CHECK) && crc::CHECK
|
10
10
|
name = crc.to_s.slice(/\w+$/)
|
11
11
|
class_eval(<<-"TESTCODE", __FILE__, __LINE__ + 1)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dearblue
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '12'
|
27
27
|
description: |
|
28
|
-
Pure ruby implemented
|
28
|
+
Pure ruby implemented generic CRC (Cyclic Redundancy Check) calculator.
|
29
29
|
Customization is posible for 1 to 64 bit width, any polynomials, and with/without bit reflection input/output.
|
30
30
|
If you need more speed, please use crc-turbo.
|
31
31
|
email: dearblue@users.noreply.github.com
|
@@ -36,6 +36,7 @@ extensions: []
|
|
36
36
|
extra_rdoc_files:
|
37
37
|
- HISTORY.ja.md
|
38
38
|
- LICENSE
|
39
|
+
- README.ja.md
|
39
40
|
- README.md
|
40
41
|
- lib/crc.rb
|
41
42
|
- lib/crc/_aux.rb
|
@@ -44,7 +45,7 @@ extra_rdoc_files:
|
|
44
45
|
- lib/crc/_extensions.rb
|
45
46
|
- lib/crc/_file.rb
|
46
47
|
- lib/crc/_magic.rb
|
47
|
-
- lib/crc/
|
48
|
+
- lib/crc/_models.rb
|
48
49
|
- lib/crc/_shift.rb
|
49
50
|
- lib/crc/_utils.rb
|
50
51
|
- lib/crc/acrc.rb
|
@@ -54,6 +55,7 @@ extra_rdoc_files:
|
|
54
55
|
files:
|
55
56
|
- HISTORY.ja.md
|
56
57
|
- LICENSE
|
58
|
+
- README.ja.md
|
57
59
|
- README.md
|
58
60
|
- Rakefile
|
59
61
|
- benchmark.rb
|
@@ -67,7 +69,7 @@ files:
|
|
67
69
|
- lib/crc/_extensions.rb
|
68
70
|
- lib/crc/_file.rb
|
69
71
|
- lib/crc/_magic.rb
|
70
|
-
- lib/crc/
|
72
|
+
- lib/crc/_models.rb
|
71
73
|
- lib/crc/_shift.rb
|
72
74
|
- lib/crc/_utils.rb
|
73
75
|
- lib/crc/acrc.rb
|
@@ -85,7 +87,7 @@ licenses:
|
|
85
87
|
- Zlib
|
86
88
|
- CC0-1.0
|
87
89
|
metadata: {}
|
88
|
-
post_install_message:
|
90
|
+
post_install_message:
|
89
91
|
rdoc_options:
|
90
92
|
- "--charset"
|
91
93
|
- UTF-8
|
@@ -104,9 +106,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
106
|
- !ruby/object:Gem::Version
|
105
107
|
version: '0'
|
106
108
|
requirements: []
|
107
|
-
|
108
|
-
|
109
|
-
signing_key:
|
109
|
+
rubygems_version: 3.0.6
|
110
|
+
signing_key:
|
110
111
|
specification_version: 4
|
111
|
-
summary:
|
112
|
+
summary: generic CRC calculator
|
112
113
|
test_files: []
|