digest-crc 0.4.0 → 0.6.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (162) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.travis.yml +24 -0
  4. data/ChangeLog.md +102 -0
  5. data/Gemfile +15 -0
  6. data/LICENSE.txt +1 -1
  7. data/README.md +71 -17
  8. data/Rakefile +31 -23
  9. data/benchmarks.rb +58 -0
  10. data/digest-crc.gemspec +2 -1
  11. data/ext/digest/Rakefile +51 -0
  12. data/ext/digest/compat/ruby.h +11 -0
  13. data/ext/digest/crc12_3gpp/crc12_3gpp.c +66 -0
  14. data/ext/digest/crc12_3gpp/crc12_3gpp.h +11 -0
  15. data/ext/digest/crc12_3gpp/crc12_3gpp_ext.c +27 -0
  16. data/ext/digest/crc12_3gpp/extconf.rb +7 -0
  17. data/ext/digest/crc15/crc15.c +53 -0
  18. data/ext/digest/crc15/crc15.h +11 -0
  19. data/ext/digest/crc15/crc15_ext.c +28 -0
  20. data/ext/digest/crc15/extconf.rb +7 -0
  21. data/ext/digest/crc16/crc16.c +69 -0
  22. data/ext/digest/crc16/crc16.h +11 -0
  23. data/ext/digest/crc16/crc16_ext.c +28 -0
  24. data/ext/digest/crc16/extconf.rb +7 -0
  25. data/ext/digest/crc16_ccitt/crc16_ccitt.c +69 -0
  26. data/ext/digest/crc16_ccitt/crc16_ccitt.h +8 -0
  27. data/ext/digest/crc16_ccitt/crc16_ccitt_ext.c +28 -0
  28. data/ext/digest/crc16_ccitt/extconf.rb +7 -0
  29. data/ext/digest/crc16_dnp/crc16_dnp.c +53 -0
  30. data/ext/digest/crc16_dnp/crc16_dnp.h +8 -0
  31. data/ext/digest/crc16_dnp/crc16_dnp_ext.c +28 -0
  32. data/ext/digest/crc16_dnp/extconf.rb +7 -0
  33. data/ext/digest/crc16_genibus/crc16_genibus.c +69 -0
  34. data/ext/digest/crc16_genibus/crc16_genibus.h +8 -0
  35. data/ext/digest/crc16_genibus/crc16_genibus_ext.c +28 -0
  36. data/ext/digest/crc16_genibus/extconf.rb +7 -0
  37. data/ext/digest/crc16_kermit/crc16_kermit.c +69 -0
  38. data/ext/digest/crc16_kermit/crc16_kermit.h +8 -0
  39. data/ext/digest/crc16_kermit/crc16_kermit_ext.c +28 -0
  40. data/ext/digest/crc16_kermit/extconf.rb +7 -0
  41. data/ext/digest/crc16_modbus/crc16_modbus.c +69 -0
  42. data/ext/digest/crc16_modbus/crc16_modbus.h +8 -0
  43. data/ext/digest/crc16_modbus/crc16_modbus_ext.c +28 -0
  44. data/ext/digest/crc16_modbus/extconf.rb +7 -0
  45. data/ext/digest/crc16_usb/crc16_usb.c +69 -0
  46. data/ext/digest/crc16_usb/crc16_usb.h +8 -0
  47. data/ext/digest/crc16_usb/crc16_usb_ext.c +28 -0
  48. data/ext/digest/crc16_usb/extconf.rb +7 -0
  49. data/ext/digest/crc16_x_25/crc16_x_25.c +69 -0
  50. data/ext/digest/crc16_x_25/crc16_x_25.h +8 -0
  51. data/ext/digest/crc16_x_25/crc16_x_25_ext.c +28 -0
  52. data/ext/digest/crc16_x_25/extconf.rb +7 -0
  53. data/ext/digest/crc16_xmodem/crc16_xmodem.c +69 -0
  54. data/ext/digest/crc16_xmodem/crc16_xmodem.h +8 -0
  55. data/ext/digest/crc16_xmodem/crc16_xmodem_ext.c +28 -0
  56. data/ext/digest/crc16_xmodem/extconf.rb +7 -0
  57. data/ext/digest/crc16_zmodem/crc16_zmodem.c +69 -0
  58. data/ext/digest/crc16_zmodem/crc16_zmodem.h +8 -0
  59. data/ext/digest/crc16_zmodem/crc16_zmodem_ext.c +28 -0
  60. data/ext/digest/crc16_zmodem/extconf.rb +7 -0
  61. data/ext/digest/crc24/crc24.c +69 -0
  62. data/ext/digest/crc24/crc24.h +11 -0
  63. data/ext/digest/crc24/crc24_ext.c +27 -0
  64. data/ext/digest/crc24/extconf.rb +7 -0
  65. data/ext/digest/crc32/crc32.c +68 -0
  66. data/ext/digest/crc32/crc32.h +11 -0
  67. data/ext/digest/crc32/crc32_ext.c +27 -0
  68. data/ext/digest/crc32/extconf.rb +7 -0
  69. data/ext/digest/crc32_bzip2/crc32_bzip2.c +69 -0
  70. data/ext/digest/crc32_bzip2/crc32_bzip2.h +8 -0
  71. data/ext/digest/crc32_bzip2/crc32_bzip2_ext.c +27 -0
  72. data/ext/digest/crc32_bzip2/extconf.rb +7 -0
  73. data/ext/digest/crc32_jam/crc32_jam.c +69 -0
  74. data/ext/digest/crc32_jam/crc32_jam.h +8 -0
  75. data/ext/digest/crc32_jam/crc32_jam_ext.c +27 -0
  76. data/ext/digest/crc32_jam/extconf.rb +7 -0
  77. data/ext/digest/crc32_mpeg/crc32_mpeg.c +69 -0
  78. data/ext/digest/crc32_mpeg/crc32_mpeg.h +8 -0
  79. data/ext/digest/crc32_mpeg/crc32_mpeg_ext.c +27 -0
  80. data/ext/digest/crc32_mpeg/extconf.rb +7 -0
  81. data/ext/digest/crc32_posix/crc32_posix.c +69 -0
  82. data/ext/digest/crc32_posix/crc32_posix.h +8 -0
  83. data/ext/digest/crc32_posix/crc32_posix_ext.c +27 -0
  84. data/ext/digest/crc32_posix/extconf.rb +7 -0
  85. data/ext/digest/crc32_xfer/crc32_xfer.c +69 -0
  86. data/ext/digest/crc32_xfer/crc32_xfer.h +8 -0
  87. data/ext/digest/crc32_xfer/crc32_xfer_ext.c +27 -0
  88. data/ext/digest/crc32_xfer/extconf.rb +7 -0
  89. data/ext/digest/crc32c/crc32c.c +69 -0
  90. data/ext/digest/crc32c/crc32c.h +8 -0
  91. data/ext/digest/crc32c/crc32c_ext.c +27 -0
  92. data/ext/digest/crc32c/extconf.rb +7 -0
  93. data/ext/digest/crc5/crc5.c +53 -0
  94. data/ext/digest/crc5/crc5.h +11 -0
  95. data/ext/digest/crc5/crc5_ext.c +27 -0
  96. data/ext/digest/crc5/extconf.rb +7 -0
  97. data/ext/digest/crc64/crc64.c +102 -0
  98. data/ext/digest/crc64/crc64.h +11 -0
  99. data/ext/digest/crc64/crc64_ext.c +27 -0
  100. data/ext/digest/crc64/extconf.rb +7 -0
  101. data/ext/digest/crc64_jones/crc64_jones.c +102 -0
  102. data/ext/digest/crc64_jones/crc64_jones.h +8 -0
  103. data/ext/digest/crc64_jones/crc64_jones_ext.c +27 -0
  104. data/ext/digest/crc64_jones/extconf.rb +7 -0
  105. data/ext/digest/crc64_xz/crc64_xz.c +102 -0
  106. data/ext/digest/crc64_xz/crc64_xz.h +8 -0
  107. data/ext/digest/crc64_xz/crc64_xz_ext.c +27 -0
  108. data/ext/digest/crc64_xz/extconf.rb +7 -0
  109. data/ext/digest/crc8/crc8.c +53 -0
  110. data/ext/digest/crc8/crc8.h +11 -0
  111. data/ext/digest/crc8/crc8_ext.c +27 -0
  112. data/ext/digest/crc8/extconf.rb +7 -0
  113. data/ext/digest/crc8_1wire/crc8_1wire.c +53 -0
  114. data/ext/digest/crc8_1wire/crc8_1wire.h +8 -0
  115. data/ext/digest/crc8_1wire/crc8_1wire_ext.c +27 -0
  116. data/ext/digest/crc8_1wire/extconf.rb +7 -0
  117. data/gemspec.yml +14 -6
  118. data/lib/digest/crc.rb +23 -7
  119. data/lib/digest/crc1.rb +0 -3
  120. data/lib/digest/crc15.rb +70 -0
  121. data/lib/digest/crc16.rb +6 -2
  122. data/lib/digest/crc16_ccitt.rb +7 -3
  123. data/lib/digest/crc16_dnp.rb +6 -2
  124. data/lib/digest/crc16_genibus.rb +72 -0
  125. data/lib/digest/crc16_kermit.rb +66 -0
  126. data/lib/digest/crc16_modbus.rb +5 -15
  127. data/lib/digest/crc16_qt.rb +11 -9
  128. data/lib/digest/crc16_usb.rb +4 -0
  129. data/lib/digest/crc16_x_25.rb +56 -0
  130. data/lib/digest/crc16_xmodem.rb +6 -2
  131. data/lib/digest/crc16_zmodem.rb +6 -2
  132. data/lib/digest/crc24.rb +6 -2
  133. data/lib/digest/crc32.rb +6 -2
  134. data/lib/digest/crc32_bzip2.rb +64 -0
  135. data/lib/digest/crc32_jam.rb +16 -0
  136. data/lib/digest/crc32_mpeg.rb +11 -3
  137. data/lib/digest/crc32_posix.rb +65 -0
  138. data/lib/digest/crc32_xfer.rb +68 -0
  139. data/lib/digest/crc32c.rb +5 -15
  140. data/lib/digest/crc5.rb +28 -2
  141. data/lib/digest/crc64.rb +6 -2
  142. data/lib/digest/crc64_jones.rb +88 -0
  143. data/lib/digest/crc64_xz.rb +90 -0
  144. data/lib/digest/crc8.rb +6 -2
  145. data/lib/digest/crc8_1wire.rb +9 -33
  146. data/spec/crc15_spec.rb +10 -0
  147. data/spec/crc16_genibus_spec.rb +10 -0
  148. data/spec/crc16_kermit_spec.rb +10 -0
  149. data/spec/crc16_x_25_spec.rb +10 -0
  150. data/spec/crc32_bzip2_spec.rb +10 -0
  151. data/spec/crc32_jam_spec.rb +10 -0
  152. data/spec/crc32_mpeg_spec.rb +7 -1
  153. data/spec/crc32_posix_spec.rb +10 -0
  154. data/spec/crc32_xfer_spec.rb +10 -0
  155. data/spec/crc64_jones_spec.rb +10 -0
  156. data/spec/crc64_xz_spec.rb +10 -0
  157. data/spec/crc8_1wire_spec.rb +7 -1
  158. data/spec/crc_examples.rb +3 -3
  159. data/spec/crc_spec.rb +63 -5
  160. data/spec/spec_helper.rb +0 -1
  161. metadata +151 -54
  162. data/.gemtest +0 -0
@@ -6,9 +6,6 @@ module Digest
6
6
  #
7
7
  class CRC1 < CRC
8
8
 
9
- TABLE = []
10
- CRC_MASK = 0x00
11
-
12
9
  #
13
10
  # Packs the CRC1 checksum.
14
11
  #
@@ -0,0 +1,70 @@
1
+ require 'digest/crc'
2
+
3
+ module Digest
4
+ #
5
+ # Implements the CRC15 algorithm.
6
+ #
7
+ # @since 0.5.0
8
+ #
9
+ class CRC15 < CRC
10
+
11
+ WIDTH = 15
12
+
13
+ # Generated by `./pycrc.py --algorithm=table-driven --model=crc-16 --generate=c`
14
+ TABLE = [
15
+ 0x0000, 0x4599, 0x4eab, 0x0b32, 0x58cf, 0x1d56, 0x1664, 0x53fd, 0x7407, 0x319e, 0x3aac, 0x7f35, 0x2cc8, 0x6951, 0x6263, 0x27fa,
16
+ 0x2d97, 0x680e, 0x633c, 0x26a5, 0x7558, 0x30c1, 0x3bf3, 0x7e6a, 0x5990, 0x1c09, 0x173b, 0x52a2, 0x015f, 0x44c6, 0x4ff4, 0x0a6d,
17
+ 0x5b2e, 0x1eb7, 0x1585, 0x501c, 0x03e1, 0x4678, 0x4d4a, 0x08d3, 0x2f29, 0x6ab0, 0x6182, 0x241b, 0x77e6, 0x327f, 0x394d, 0x7cd4,
18
+ 0x76b9, 0x3320, 0x3812, 0x7d8b, 0x2e76, 0x6bef, 0x60dd, 0x2544, 0x02be, 0x4727, 0x4c15, 0x098c, 0x5a71, 0x1fe8, 0x14da, 0x5143,
19
+ 0x73c5, 0x365c, 0x3d6e, 0x78f7, 0x2b0a, 0x6e93, 0x65a1, 0x2038, 0x07c2, 0x425b, 0x4969, 0x0cf0, 0x5f0d, 0x1a94, 0x11a6, 0x543f,
20
+ 0x5e52, 0x1bcb, 0x10f9, 0x5560, 0x069d, 0x4304, 0x4836, 0x0daf, 0x2a55, 0x6fcc, 0x64fe, 0x2167, 0x729a, 0x3703, 0x3c31, 0x79a8,
21
+ 0x28eb, 0x6d72, 0x6640, 0x23d9, 0x7024, 0x35bd, 0x3e8f, 0x7b16, 0x5cec, 0x1975, 0x1247, 0x57de, 0x0423, 0x41ba, 0x4a88, 0x0f11,
22
+ 0x057c, 0x40e5, 0x4bd7, 0x0e4e, 0x5db3, 0x182a, 0x1318, 0x5681, 0x717b, 0x34e2, 0x3fd0, 0x7a49, 0x29b4, 0x6c2d, 0x671f, 0x2286,
23
+ 0x2213, 0x678a, 0x6cb8, 0x2921, 0x7adc, 0x3f45, 0x3477, 0x71ee, 0x5614, 0x138d, 0x18bf, 0x5d26, 0x0edb, 0x4b42, 0x4070, 0x05e9,
24
+ 0x0f84, 0x4a1d, 0x412f, 0x04b6, 0x574b, 0x12d2, 0x19e0, 0x5c79, 0x7b83, 0x3e1a, 0x3528, 0x70b1, 0x234c, 0x66d5, 0x6de7, 0x287e,
25
+ 0x793d, 0x3ca4, 0x3796, 0x720f, 0x21f2, 0x646b, 0x6f59, 0x2ac0, 0x0d3a, 0x48a3, 0x4391, 0x0608, 0x55f5, 0x106c, 0x1b5e, 0x5ec7,
26
+ 0x54aa, 0x1133, 0x1a01, 0x5f98, 0x0c65, 0x49fc, 0x42ce, 0x0757, 0x20ad, 0x6534, 0x6e06, 0x2b9f, 0x7862, 0x3dfb, 0x36c9, 0x7350,
27
+ 0x51d6, 0x144f, 0x1f7d, 0x5ae4, 0x0919, 0x4c80, 0x47b2, 0x022b, 0x25d1, 0x6048, 0x6b7a, 0x2ee3, 0x7d1e, 0x3887, 0x33b5, 0x762c,
28
+ 0x7c41, 0x39d8, 0x32ea, 0x7773, 0x248e, 0x6117, 0x6a25, 0x2fbc, 0x0846, 0x4ddf, 0x46ed, 0x0374, 0x5089, 0x1510, 0x1e22, 0x5bbb,
29
+ 0x0af8, 0x4f61, 0x4453, 0x01ca, 0x5237, 0x17ae, 0x1c9c, 0x5905, 0x7eff, 0x3b66, 0x3054, 0x75cd, 0x2630, 0x63a9, 0x689b, 0x2d02,
30
+ 0x276f, 0x62f6, 0x69c4, 0x2c5d, 0x7fa0, 0x3a39, 0x310b, 0x7492, 0x5368, 0x16f1, 0x1dc3, 0x585a, 0x0ba7, 0x4e3e, 0x450c, 0x0095
31
+ ].freeze
32
+
33
+ #
34
+ # Packs the CRC15 checksum.
35
+ #
36
+ # @param [Integer] crc
37
+ # The CRC15 checksum to pack.
38
+ #
39
+ # @return [String]
40
+ # The packed CRC15 checksum.
41
+ #
42
+ def self.pack(crc)
43
+ buffer = ''
44
+
45
+ buffer << ((crc & 0x7f00) >> 8).chr
46
+ buffer << (crc & 0xff).chr
47
+
48
+ buffer
49
+ end
50
+
51
+ #
52
+ # Updates the CRC15 checksum.
53
+ #
54
+ # @param [String] data
55
+ # The data to update the checksum with.
56
+ #
57
+ def update(data)
58
+ data.each_byte do |b|
59
+ @crc = (@table[((@crc >> 7) ^ b) & 0xff] ^ (@crc << 8)) & 0x7fff
60
+ end
61
+
62
+ return self
63
+ end
64
+
65
+ end
66
+ end
67
+
68
+ if RUBY_ENGINE == 'ruby'
69
+ begin; require 'digest/crc15/crc15_ext'; rescue LoadError; end
70
+ end
@@ -44,7 +44,7 @@ module Digest
44
44
  0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41,
45
45
  0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641,
46
46
  0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040
47
- ]
47
+ ].freeze
48
48
 
49
49
  #
50
50
  # Packs the CRC16 checksum.
@@ -72,7 +72,7 @@ module Digest
72
72
  #
73
73
  def update(data)
74
74
  data.each_byte do |b|
75
- @crc = ((TABLE[(@crc ^ b) & 0xff] ^ (@crc >> 8)) & 0xffff)
75
+ @crc = ((@table[(@crc ^ b) & 0xff] ^ (@crc >> 8)) & 0xffff)
76
76
  end
77
77
 
78
78
  return self
@@ -80,3 +80,7 @@ module Digest
80
80
 
81
81
  end
82
82
  end
83
+
84
+ if RUBY_ENGINE == 'ruby'
85
+ begin; require 'digest/crc16/crc16_ext'; rescue LoadError; end
86
+ end
@@ -8,7 +8,7 @@ module Digest
8
8
 
9
9
  INIT_CRC = 0xffff
10
10
 
11
- # Generated by `./pycrc.py --algorithm=table-driven --model=ccitt --generate=c`
11
+ # Generated by `./pycrc.py --algorithm=table-driven --model=crc-16-ccitt --generate=c`
12
12
  TABLE = [
13
13
  0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
14
14
  0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
@@ -42,7 +42,7 @@ module Digest
42
42
  0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
43
43
  0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
44
44
  0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
45
- ]
45
+ ].freeze
46
46
 
47
47
  #
48
48
  # Updates the CRC16 CCITT checksum.
@@ -52,7 +52,7 @@ module Digest
52
52
  #
53
53
  def update(data)
54
54
  data.each_byte do |b|
55
- @crc = ((TABLE[((@crc >> 8) ^ b) & 0xff] ^ (@crc << 8)) & 0xffff)
55
+ @crc = ((@table[((@crc >> 8) ^ b) & 0xff] ^ (@crc << 8)) & 0xffff)
56
56
  end
57
57
 
58
58
  return self
@@ -60,3 +60,7 @@ module Digest
60
60
 
61
61
  end
62
62
  end
63
+
64
+ if RUBY_ENGINE == 'ruby'
65
+ begin; require 'digest/crc16_ccitt/crc16_ccitt_ext'; rescue LoadError; end
66
+ end
@@ -41,7 +41,7 @@ module Digest
41
41
  0x23c4, 0x159a, 0x4f78, 0x7926, 0xfabc, 0xcce2, 0x9600, 0xa05e,
42
42
  0x6e26, 0x5878, 0x029a, 0x34c4, 0xb75e, 0x8100, 0xdbe2, 0xedbc,
43
43
  0x91af, 0xa7f1, 0xfd13, 0xcb4d, 0x48d7, 0x7e89, 0x246b, 0x1235
44
- ]
44
+ ].freeze
45
45
 
46
46
  #
47
47
  # Updates the CRC16 DNP checksum.
@@ -51,7 +51,7 @@ module Digest
51
51
  #
52
52
  def update(data)
53
53
  data.each_byte do |b|
54
- @crc = ((@crc >> 8) ^ TABLE[(@crc ^ b) & 0xff])
54
+ @crc = ((@crc >> 8) ^ @table[(@crc ^ b) & 0xff])
55
55
  end
56
56
 
57
57
  return self
@@ -63,3 +63,7 @@ module Digest
63
63
 
64
64
  end
65
65
  end
66
+
67
+ if RUBY_ENGINE == 'ruby'
68
+ begin; require 'digest/crc16_dnp/crc16_dnp_ext'; rescue LoadError; end
69
+ end
@@ -0,0 +1,72 @@
1
+ require 'digest/crc16'
2
+
3
+ module Digest
4
+ #
5
+ # Implements the CRC16 Genibus algorithm.
6
+ #
7
+ # @since 0.5.0
8
+ #
9
+ class CRC16Genibus < CRC16
10
+
11
+ INIT_XOR = 0xffff
12
+
13
+ INIT_CRC = 0x0000 ^ INIT_XOR
14
+
15
+ XOR_MASK = 0xffff
16
+
17
+ # Generated by `./pycrc.py --algorithm=table-driven --model=crc-16 --generate=c`
18
+ TABLE = [
19
+ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
20
+ 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
21
+ 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
22
+ 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
23
+ 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
24
+ 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
25
+ 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
26
+ 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
27
+ 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
28
+ 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
29
+ 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
30
+ 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
31
+ 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
32
+ 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
33
+ 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
34
+ 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
35
+ 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
36
+ 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
37
+ 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
38
+ 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
39
+ 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
40
+ 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
41
+ 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
42
+ 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
43
+ 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
44
+ 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
45
+ 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
46
+ 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
47
+ 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
48
+ 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
49
+ 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
50
+ 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
51
+ ].freeze
52
+
53
+ #
54
+ # Updates the CRC16 Genibus checksum.
55
+ #
56
+ # @param [String] data
57
+ # The data to update the checksum with.
58
+ #
59
+ def update(data)
60
+ data.each_byte do |b|
61
+ @crc = (@table[((@crc >> 8) ^ b) & 0xff] ^ (@crc << 8)) & 0xffff
62
+ end
63
+
64
+ return self
65
+ end
66
+
67
+ end
68
+ end
69
+
70
+ if RUBY_ENGINE == 'ruby'
71
+ begin; require 'digest/crc16_genibus/crc16_genibus_ext'; rescue LoadError; end
72
+ end
@@ -0,0 +1,66 @@
1
+ require "digest/crc16"
2
+
3
+ module Digest
4
+ #
5
+ # Implements Kermit's CRC16 function.
6
+ #
7
+ # @since 0.5.0
8
+ #
9
+ class CRC16Kermit < CRC16
10
+
11
+ # Generated by `./pycrc.py --algorithm=table-driven --model=kermit --generate=c`
12
+ TABLE = [
13
+ 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
14
+ 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
15
+ 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
16
+ 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
17
+ 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
18
+ 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
19
+ 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
20
+ 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
21
+ 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
22
+ 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
23
+ 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
24
+ 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
25
+ 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
26
+ 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
27
+ 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
28
+ 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
29
+ 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
30
+ 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
31
+ 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
32
+ 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
33
+ 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
34
+ 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
35
+ 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
36
+ 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
37
+ 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
38
+ 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
39
+ 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
40
+ 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
41
+ 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
42
+ 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
43
+ 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
44
+ 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
45
+ ].freeze
46
+
47
+ #
48
+ # Updates the CRC16 Kermit checksum.
49
+ #
50
+ # @param [String] data
51
+ # The data to update the checksum with.
52
+ #
53
+ def update(data)
54
+ data.each_byte do |b|
55
+ @crc = (@table[(@crc ^ b) & 0xff] ^ (@crc >> 8)) & 0xffff
56
+ end
57
+
58
+ return self
59
+ end
60
+
61
+ end
62
+ end
63
+
64
+ if RUBY_ENGINE == 'ruby'
65
+ begin; require 'digest/crc16_kermit/crc16_kermit_ext'; rescue LoadError; end
66
+ end
@@ -42,21 +42,11 @@ module Digest
42
42
  0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41,
43
43
  0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641,
44
44
  0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040
45
- ]
46
-
47
- #
48
- # Updates the CRC16 Modbus checksum.
49
- #
50
- # @param [String] data
51
- # The data to update the checksum with.
52
- #
53
- def update(data)
54
- data.each_byte do |b|
55
- @crc = (((@crc >> 8) ^ TABLE[(b ^ @crc) & 0xff]) & 0xffff)
56
- end
57
-
58
- return self
59
- end
45
+ ].freeze
60
46
 
61
47
  end
62
48
  end
49
+
50
+ if RUBY_ENGINE == 'ruby'
51
+ begin; require 'digest/crc16_modbus/crc16_modbus_ext'; rescue LoadError; end
52
+ end
@@ -10,10 +10,7 @@ module Digest
10
10
 
11
11
  FINAL_XOR = 0xffff
12
12
 
13
- REVERSE_CRC_RESULT = true
14
-
15
- REVERSE_DATA = true
16
-
13
+ #
17
14
  # Updates the CRC16 checksum.
18
15
  #
19
16
  # @param [String] data
@@ -21,17 +18,22 @@ module Digest
21
18
  #
22
19
  def update(data)
23
20
  data.each_byte do |b|
24
- b = revert_byte(b) if REVERSE_DATA
25
- @crc = ((TABLE[((@crc >> 8) ^ b) & 0xff] ^ (@crc << 8)) & 0xffff)
21
+ b = revert_byte(b)
22
+ @crc = ((@table[((@crc >> 8) ^ b) & 0xff] ^ (@crc << 8)) & 0xffff)
26
23
  end
27
24
 
28
25
  return self
29
26
  end
30
27
 
28
+ #
29
+ # Calculates the CRC checksum value.
30
+ #
31
+ # @return [Integer]
32
+ #
31
33
  def checksum
32
- crc = @crc + 0
33
- crc ^= FINAL_XOR if FINAL_XOR
34
- crc = revert_bits crc if REVERSE_CRC_RESULT
34
+ crc = super
35
+ crc ^= FINAL_XOR
36
+ crc = revert_bits(crc)
35
37
  return crc
36
38
  end
37
39
 
@@ -12,3 +12,7 @@ module Digest
12
12
 
13
13
  end
14
14
  end
15
+
16
+ if RUBY_ENGINE == 'ruby'
17
+ begin; require 'digest/crc16_usb/crc16_usb_ext'; rescue LoadError; end
18
+ end
@@ -0,0 +1,56 @@
1
+ require 'digest/crc16'
2
+
3
+ module Digest
4
+ #
5
+ # Implements the CRC16 X25 algorithm.
6
+ #
7
+ class CRC16X25 < CRC16
8
+
9
+ INIT_XOR = 0xffff
10
+
11
+ INIT_CRC = 0x0 ^ INIT_XOR
12
+
13
+ XOR_MASK = 0xffff
14
+
15
+ # Generated by `./pycrc.py --algorithm=table-driven --model=x-25 --generate=c`
16
+ TABLE = [
17
+ 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
18
+ 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
19
+ 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
20
+ 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
21
+ 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
22
+ 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
23
+ 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
24
+ 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
25
+ 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
26
+ 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
27
+ 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
28
+ 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
29
+ 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
30
+ 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
31
+ 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
32
+ 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
33
+ 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
34
+ 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
35
+ 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
36
+ 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
37
+ 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
38
+ 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
39
+ 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
40
+ 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
41
+ 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
42
+ 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
43
+ 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
44
+ 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
45
+ 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
46
+ 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
47
+ 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
48
+ 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
49
+ ].freeze
50
+
51
+ end
52
+ end
53
+
54
+ if RUBY_ENGINE == 'ruby'
55
+ begin; require 'digest/crc16_x_25/crc16_x_25_ext'; rescue LoadError; end
56
+ end
@@ -40,7 +40,7 @@ module Digest
40
40
  0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
41
41
  0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
42
42
  0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
43
- ]
43
+ ].freeze
44
44
 
45
45
  #
46
46
  # Updates the CRC16 XModem checksum.
@@ -50,7 +50,7 @@ module Digest
50
50
  #
51
51
  def update(data)
52
52
  data.each_byte do |b|
53
- @crc = ((TABLE[((@crc >> 8) ^ b) & 0xff] ^ (@crc << 8)) & 0xffff)
53
+ @crc = ((@table[((@crc >> 8) ^ b) & 0xff] ^ (@crc << 8)) & 0xffff)
54
54
  end
55
55
 
56
56
  return self
@@ -58,3 +58,7 @@ module Digest
58
58
 
59
59
  end
60
60
  end
61
+
62
+ if RUBY_ENGINE == 'ruby'
63
+ begin; require 'digest/crc16_xmodem/crc16_xmodem_ext'; rescue LoadError; end
64
+ end