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
@@ -0,0 +1,90 @@
1
+ require 'digest/crc64'
2
+
3
+ module Digest
4
+ #
5
+ # Implements the CRC64 XZ algorithm.
6
+ #
7
+ # @since 0.5.0
8
+ #
9
+ class CRC64XZ < CRC64
10
+
11
+ INIT_XOR = 0xffffffffffffffff
12
+
13
+ INIT_CRC = 0x0 ^ INIT_XOR
14
+
15
+ XOR_MASK = 0xffffffffffffffff
16
+
17
+ # Generated by `./pycrc.py --algorithm=table-driven --model=crc-64-xz --generate=c`
18
+ TABLE = [
19
+ 0x0000000000000000, 0xb32e4cbe03a75f6f, 0xf4843657a840a05b, 0x47aa7ae9abe7ff34,
20
+ 0x7bd0c384ff8f5e33, 0xc8fe8f3afc28015c, 0x8f54f5d357cffe68, 0x3c7ab96d5468a107,
21
+ 0xf7a18709ff1ebc66, 0x448fcbb7fcb9e309, 0x0325b15e575e1c3d, 0xb00bfde054f94352,
22
+ 0x8c71448d0091e255, 0x3f5f08330336bd3a, 0x78f572daa8d1420e, 0xcbdb3e64ab761d61,
23
+ 0x7d9ba13851336649, 0xceb5ed8652943926, 0x891f976ff973c612, 0x3a31dbd1fad4997d,
24
+ 0x064b62bcaebc387a, 0xb5652e02ad1b6715, 0xf2cf54eb06fc9821, 0x41e11855055bc74e,
25
+ 0x8a3a2631ae2dda2f, 0x39146a8fad8a8540, 0x7ebe1066066d7a74, 0xcd905cd805ca251b,
26
+ 0xf1eae5b551a2841c, 0x42c4a90b5205db73, 0x056ed3e2f9e22447, 0xb6409f5cfa457b28,
27
+ 0xfb374270a266cc92, 0x48190ecea1c193fd, 0x0fb374270a266cc9, 0xbc9d3899098133a6,
28
+ 0x80e781f45de992a1, 0x33c9cd4a5e4ecdce, 0x7463b7a3f5a932fa, 0xc74dfb1df60e6d95,
29
+ 0x0c96c5795d7870f4, 0xbfb889c75edf2f9b, 0xf812f32ef538d0af, 0x4b3cbf90f69f8fc0,
30
+ 0x774606fda2f72ec7, 0xc4684a43a15071a8, 0x83c230aa0ab78e9c, 0x30ec7c140910d1f3,
31
+ 0x86ace348f355aadb, 0x3582aff6f0f2f5b4, 0x7228d51f5b150a80, 0xc10699a158b255ef,
32
+ 0xfd7c20cc0cdaf4e8, 0x4e526c720f7dab87, 0x09f8169ba49a54b3, 0xbad65a25a73d0bdc,
33
+ 0x710d64410c4b16bd, 0xc22328ff0fec49d2, 0x85895216a40bb6e6, 0x36a71ea8a7ace989,
34
+ 0x0adda7c5f3c4488e, 0xb9f3eb7bf06317e1, 0xfe5991925b84e8d5, 0x4d77dd2c5823b7ba,
35
+ 0x64b62bcaebc387a1, 0xd7986774e864d8ce, 0x90321d9d438327fa, 0x231c512340247895,
36
+ 0x1f66e84e144cd992, 0xac48a4f017eb86fd, 0xebe2de19bc0c79c9, 0x58cc92a7bfab26a6,
37
+ 0x9317acc314dd3bc7, 0x2039e07d177a64a8, 0x67939a94bc9d9b9c, 0xd4bdd62abf3ac4f3,
38
+ 0xe8c76f47eb5265f4, 0x5be923f9e8f53a9b, 0x1c4359104312c5af, 0xaf6d15ae40b59ac0,
39
+ 0x192d8af2baf0e1e8, 0xaa03c64cb957be87, 0xeda9bca512b041b3, 0x5e87f01b11171edc,
40
+ 0x62fd4976457fbfdb, 0xd1d305c846d8e0b4, 0x96797f21ed3f1f80, 0x2557339fee9840ef,
41
+ 0xee8c0dfb45ee5d8e, 0x5da24145464902e1, 0x1a083bacedaefdd5, 0xa9267712ee09a2ba,
42
+ 0x955cce7fba6103bd, 0x267282c1b9c65cd2, 0x61d8f8281221a3e6, 0xd2f6b4961186fc89,
43
+ 0x9f8169ba49a54b33, 0x2caf25044a02145c, 0x6b055fede1e5eb68, 0xd82b1353e242b407,
44
+ 0xe451aa3eb62a1500, 0x577fe680b58d4a6f, 0x10d59c691e6ab55b, 0xa3fbd0d71dcdea34,
45
+ 0x6820eeb3b6bbf755, 0xdb0ea20db51ca83a, 0x9ca4d8e41efb570e, 0x2f8a945a1d5c0861,
46
+ 0x13f02d374934a966, 0xa0de61894a93f609, 0xe7741b60e174093d, 0x545a57dee2d35652,
47
+ 0xe21ac88218962d7a, 0x5134843c1b317215, 0x169efed5b0d68d21, 0xa5b0b26bb371d24e,
48
+ 0x99ca0b06e7197349, 0x2ae447b8e4be2c26, 0x6d4e3d514f59d312, 0xde6071ef4cfe8c7d,
49
+ 0x15bb4f8be788911c, 0xa6950335e42fce73, 0xe13f79dc4fc83147, 0x521135624c6f6e28,
50
+ 0x6e6b8c0f1807cf2f, 0xdd45c0b11ba09040, 0x9aefba58b0476f74, 0x29c1f6e6b3e0301b,
51
+ 0xc96c5795d7870f42, 0x7a421b2bd420502d, 0x3de861c27fc7af19, 0x8ec62d7c7c60f076,
52
+ 0xb2bc941128085171, 0x0192d8af2baf0e1e, 0x4638a2468048f12a, 0xf516eef883efae45,
53
+ 0x3ecdd09c2899b324, 0x8de39c222b3eec4b, 0xca49e6cb80d9137f, 0x7967aa75837e4c10,
54
+ 0x451d1318d716ed17, 0xf6335fa6d4b1b278, 0xb199254f7f564d4c, 0x02b769f17cf11223,
55
+ 0xb4f7f6ad86b4690b, 0x07d9ba1385133664, 0x4073c0fa2ef4c950, 0xf35d8c442d53963f,
56
+ 0xcf273529793b3738, 0x7c0979977a9c6857, 0x3ba3037ed17b9763, 0x888d4fc0d2dcc80c,
57
+ 0x435671a479aad56d, 0xf0783d1a7a0d8a02, 0xb7d247f3d1ea7536, 0x04fc0b4dd24d2a59,
58
+ 0x3886b22086258b5e, 0x8ba8fe9e8582d431, 0xcc0284772e652b05, 0x7f2cc8c92dc2746a,
59
+ 0x325b15e575e1c3d0, 0x8175595b76469cbf, 0xc6df23b2dda1638b, 0x75f16f0cde063ce4,
60
+ 0x498bd6618a6e9de3, 0xfaa59adf89c9c28c, 0xbd0fe036222e3db8, 0x0e21ac88218962d7,
61
+ 0xc5fa92ec8aff7fb6, 0x76d4de52895820d9, 0x317ea4bb22bfdfed, 0x8250e80521188082,
62
+ 0xbe2a516875702185, 0x0d041dd676d77eea, 0x4aae673fdd3081de, 0xf9802b81de97deb1,
63
+ 0x4fc0b4dd24d2a599, 0xfceef8632775faf6, 0xbb44828a8c9205c2, 0x086ace348f355aad,
64
+ 0x34107759db5dfbaa, 0x873e3be7d8faa4c5, 0xc094410e731d5bf1, 0x73ba0db070ba049e,
65
+ 0xb86133d4dbcc19ff, 0x0b4f7f6ad86b4690, 0x4ce50583738cb9a4, 0xffcb493d702be6cb,
66
+ 0xc3b1f050244347cc, 0x709fbcee27e418a3, 0x3735c6078c03e797, 0x841b8ab98fa4b8f8,
67
+ 0xadda7c5f3c4488e3, 0x1ef430e13fe3d78c, 0x595e4a08940428b8, 0xea7006b697a377d7,
68
+ 0xd60abfdbc3cbd6d0, 0x6524f365c06c89bf, 0x228e898c6b8b768b, 0x91a0c532682c29e4,
69
+ 0x5a7bfb56c35a3485, 0xe955b7e8c0fd6bea, 0xaeffcd016b1a94de, 0x1dd181bf68bdcbb1,
70
+ 0x21ab38d23cd56ab6, 0x9285746c3f7235d9, 0xd52f0e859495caed, 0x6601423b97329582,
71
+ 0xd041dd676d77eeaa, 0x636f91d96ed0b1c5, 0x24c5eb30c5374ef1, 0x97eba78ec690119e,
72
+ 0xab911ee392f8b099, 0x18bf525d915feff6, 0x5f1528b43ab810c2, 0xec3b640a391f4fad,
73
+ 0x27e05a6e926952cc, 0x94ce16d091ce0da3, 0xd3646c393a29f297, 0x604a2087398eadf8,
74
+ 0x5c3099ea6de60cff, 0xef1ed5546e415390, 0xa8b4afbdc5a6aca4, 0x1b9ae303c601f3cb,
75
+ 0x56ed3e2f9e224471, 0xe5c372919d851b1e, 0xa26908783662e42a, 0x114744c635c5bb45,
76
+ 0x2d3dfdab61ad1a42, 0x9e13b115620a452d, 0xd9b9cbfcc9edba19, 0x6a978742ca4ae576,
77
+ 0xa14cb926613cf817, 0x1262f598629ba778, 0x55c88f71c97c584c, 0xe6e6c3cfcadb0723,
78
+ 0xda9c7aa29eb3a624, 0x69b2361c9d14f94b, 0x2e184cf536f3067f, 0x9d36004b35545910,
79
+ 0x2b769f17cf112238, 0x9858d3a9ccb67d57, 0xdff2a94067518263, 0x6cdce5fe64f6dd0c,
80
+ 0x50a65c93309e7c0b, 0xe388102d33392364, 0xa4226ac498dedc50, 0x170c267a9b79833f,
81
+ 0xdcd7181e300f9e5e, 0x6ff954a033a8c131, 0x28532e49984f3e05, 0x9b7d62f79be8616a,
82
+ 0xa707db9acf80c06d, 0x14299724cc279f02, 0x5383edcd67c06036, 0xe0ada17364673f59
83
+ ].freeze
84
+
85
+ end
86
+ end
87
+
88
+ if RUBY_ENGINE == 'ruby'
89
+ begin; require 'digest/crc64_xz/crc64_xz_ext'; rescue LoadError; end
90
+ end
@@ -28,7 +28,7 @@ module Digest
28
28
  0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b, 0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13,
29
29
  0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83,
30
30
  0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3
31
- ]
31
+ ].freeze
32
32
 
33
33
  #
34
34
  # Packs the CRC8 checksum.
@@ -51,7 +51,7 @@ module Digest
51
51
  #
52
52
  def update(data)
53
53
  data.each_byte do |b|
54
- @crc = ((TABLE[(@crc ^ b) & 0xff] ^ (@crc << 8)) & 0xff)
54
+ @crc = ((@table[(@crc ^ b) & 0xff] ^ (@crc << 8)) & 0xff)
55
55
  end
56
56
 
57
57
  return self
@@ -59,3 +59,7 @@ module Digest
59
59
 
60
60
  end
61
61
  end
62
+
63
+ if RUBY_ENGINE == 'ruby'
64
+ begin; require 'digest/crc8/crc8_ext'; rescue LoadError; end
65
+ end
@@ -1,14 +1,10 @@
1
- require 'digest/crc'
1
+ require 'digest/crc8'
2
2
 
3
3
  module Digest
4
4
  #
5
5
  # Implements the CRC8 1-Wire algorithm.
6
6
  #
7
- class CRC81Wire < CRC
8
-
9
- WIDTH = 8
10
-
11
- INIT_CRC = 0x00
7
+ class CRC8_1Wire < CRC8
12
8
 
13
9
  # Generated by `./pycrc.py --algorithm=table-driven --model=dallas-1-wire --generate=c`
14
10
  TABLE = [
@@ -28,34 +24,14 @@ module Digest
28
24
  0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4, 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16,
29
25
  0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a, 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8,
30
26
  0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7, 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35
31
- ]
32
-
33
- #
34
- # Packs the CRC8 checksum.
35
- #
36
- # @param [Integer] crc
37
- # The checksum to pack.
38
- #
39
- # @return [String]
40
- # The packed checksum.
41
- #
42
- def self.pack(crc)
43
- (crc & 0xff).chr
44
- end
27
+ ].freeze
45
28
 
46
- #
47
- # Updates the CRC8 checksum.
48
- #
49
- # @param [String] data
50
- # The data to update the checksum with.
51
- #
52
- def update(data)
53
- data.each_byte do |b|
54
- @crc = ((TABLE[(@crc ^ b) & 0xff] ^ (@crc << 8)) & 0xff)
55
- end
29
+ end
56
30
 
57
- return self
58
- end
31
+ # @deprecated Please use {CRC8_1Wire} instead.
32
+ CRC81Wire = CRC8_1Wire
33
+ end
59
34
 
60
- end
35
+ if RUBY_ENGINE == 'ruby'
36
+ begin; require 'digest/crc8_1wire/crc8_1wire_ext'; rescue LoadError; end
61
37
  end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+ require 'crc_examples'
3
+ require 'digest/crc15'
4
+
5
+ describe Digest::CRC15 do
6
+ let(:string) { '1234567890' }
7
+ let(:expected) { '178c' }
8
+
9
+ it_should_behave_like "CRC"
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+ require 'crc_examples'
3
+ require 'digest/crc16_genibus'
4
+
5
+ describe Digest::CRC16Genibus do
6
+ let(:string) { '1234567890' }
7
+ let(:expected) { 'cde7' }
8
+
9
+ it_should_behave_like "CRC"
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+ require 'crc_examples'
3
+ require 'digest/crc16_kermit'
4
+
5
+ describe Digest::CRC16Kermit do
6
+ let(:string) { '1234567890' }
7
+ let(:expected) { '286b' }
8
+
9
+ it_should_behave_like "CRC"
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+ require 'crc_examples'
3
+ require 'digest/crc16_x_25'
4
+
5
+ describe Digest::CRC16X25 do
6
+ let(:string) { '1234567890' }
7
+ let(:expected) { '4b13' }
8
+
9
+ it_should_behave_like "CRC"
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+ require 'crc_examples'
3
+ require 'digest/crc32_bzip2'
4
+
5
+ describe Digest::CRC32BZip2 do
6
+ let(:string) { '1234567890' }
7
+ let(:expected) { '506853b6' }
8
+
9
+ it_should_behave_like "CRC"
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+ require 'crc_examples'
3
+ require 'digest/crc32_jam'
4
+
5
+ describe Digest::CRC32Jam do
6
+ let(:string) { '1234567890' }
7
+ let(:expected) { 'd9e2511a' }
8
+
9
+ it_should_behave_like "CRC"
10
+ end
@@ -2,9 +2,15 @@ require 'spec_helper'
2
2
  require 'crc_examples'
3
3
  require 'digest/crc32_mpeg'
4
4
 
5
- describe Digest::CRC32Mpeg do
5
+ describe Digest::CRC32MPEG do
6
6
  let(:string) { '1234567890' }
7
7
  let(:expected) { 'af97ac49' }
8
8
 
9
9
  it_should_behave_like "CRC"
10
10
  end
11
+
12
+ describe "Digest::CRC32Mpeg" do
13
+ subject { Digest::CRC32Mpeg }
14
+
15
+ it { expect(subject).to eq(Digest::CRC32MPEG) }
16
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+ require 'crc_examples'
3
+ require 'digest/crc32_posix'
4
+
5
+ describe Digest::CRC32POSIX do
6
+ let(:string) { '1234567890' }
7
+ let(:expected) { 'c181fd8e' }
8
+
9
+ it_should_behave_like "CRC"
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+ require 'crc_examples'
3
+ require 'digest/crc32_xfer'
4
+
5
+ describe Digest::CRC32XFER do
6
+ let(:string) { '1234567890' }
7
+ let(:expected) { '0be368eb' }
8
+
9
+ it_should_behave_like "CRC"
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+ require 'crc_examples'
3
+ require 'digest/crc64_jones'
4
+
5
+ describe Digest::CRC64Jones do
6
+ let(:string) { '1234567890' }
7
+ let(:expected) { '68a745ba133af9bd' }
8
+
9
+ it_should_behave_like "CRC"
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+ require 'crc_examples'
3
+ require 'digest/crc64_xz'
4
+
5
+ describe Digest::CRC64XZ do
6
+ let(:string) { '1234567890' }
7
+ let(:expected) { 'b1cb31bbb4a2b2be' }
8
+
9
+ it_should_behave_like "CRC"
10
+ end
@@ -2,9 +2,15 @@ require 'spec_helper'
2
2
  require 'crc_examples'
3
3
  require 'digest/crc8_1wire'
4
4
 
5
- describe Digest::CRC81Wire do
5
+ describe Digest::CRC8_1Wire do
6
6
  let(:string) { '1234567890' }
7
7
  let(:expected) { '4f' }
8
8
 
9
9
  it_should_behave_like "CRC"
10
10
  end
11
+
12
+ describe "Digest::CRC81Wire" do
13
+ subject { Digest::CRC81Wire }
14
+
15
+ it { expect(subject).to eq(Digest::CRC8_1Wire) }
16
+ end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  shared_examples_for "CRC" do
4
4
  it "should calculate a checksum for text" do
5
- described_class.hexdigest(string).should == expected
5
+ expect(described_class.hexdigest(string)).to be == expected
6
6
  end
7
7
 
8
8
  it "should calculate a checksum for multiple data" do
@@ -15,13 +15,13 @@ shared_examples_for "CRC" do
15
15
  crc << chunk1
16
16
  crc << chunk2
17
17
 
18
- crc.hexdigest.should == expected
18
+ expect(crc.hexdigest).to be == expected
19
19
  end
20
20
 
21
21
  it "should provide direct access to the checksum value" do
22
22
  crc = subject
23
23
  crc << string
24
24
 
25
- crc.checksum.should == expected.to_i(16)
25
+ expect(crc.checksum).to be == expected.to_i(16)
26
26
  end
27
27
  end
@@ -2,13 +2,71 @@ require 'spec_helper'
2
2
  require 'digest/crc'
3
3
 
4
4
  describe Digest::CRC do
5
- it "should define block_length of 1" do
6
- crc = subject
5
+ describe "#block_length" do
6
+ it { expect(subject.block_length).to be 1 }
7
+ end
8
+
9
+ describe ".pack" do
10
+ subject { described_class }
11
+
12
+ it do
13
+ expect { subject.pack(0) }.to raise_error(NotImplementedError)
14
+ end
15
+ end
7
16
 
8
- crc.block_length.should == 1
17
+ describe "#update" do
18
+ it do
19
+ expect { subject.update('') }.to raise_error(NotImplementedError)
20
+ end
9
21
  end
10
22
 
11
- it "should pack to an empty String by default" do
12
- described_class.pack(0).should be_empty
23
+ context "when inherited" do
24
+ subject do
25
+ Class.new(described_class).tap do |klass|
26
+ klass::WIDTH = 16
27
+
28
+ klass::INIT_CRC = 0x01
29
+
30
+ klass::XOR_MASK = 0x02
31
+
32
+ klass::TABLE = [0x01, 0x02, 0x03, 0x04].freeze
33
+ end
34
+ end
35
+
36
+ it "should override WIDTH" do
37
+ expect(subject::WIDTH).not_to be described_class::WIDTH
38
+ end
39
+
40
+ it "should override INIT_CRC" do
41
+ expect(subject::INIT_CRC).not_to be described_class::INIT_CRC
42
+ end
43
+
44
+ it "should override XOR_MASK" do
45
+ expect(subject::XOR_MASK).not_to be described_class::XOR_MASK
46
+ end
47
+
48
+ it "should override TABLE" do
49
+ expect(subject::TABLE).not_to be described_class::TABLE
50
+ end
51
+
52
+ describe "#initialize" do
53
+ let(:instance) { subject.new }
54
+
55
+ it "should initialize @init_crc" do
56
+ expect(instance.instance_variable_get("@init_crc")).to be subject::INIT_CRC
57
+ end
58
+
59
+ it "should initialize @xor_mask" do
60
+ expect(instance.instance_variable_get("@xor_mask")).to be subject::XOR_MASK
61
+ end
62
+
63
+ it "should initialize @width" do
64
+ expect(instance.instance_variable_get("@width")).to be subject::WIDTH
65
+ end
66
+
67
+ it "should initialize @table" do
68
+ expect(instance.instance_variable_get("@table")).to be subject::TABLE
69
+ end
70
+ end
13
71
  end
14
72
  end
@@ -1,2 +1 @@
1
- gem 'rspec', '~> 2.4'
2
1
  require 'rspec'
metadata CHANGED
@@ -1,116 +1,210 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: digest-crc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
5
- prerelease:
4
+ version: 0.6.0.rc1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Postmodern
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-14 00:00:00.000000000 Z
11
+ date: 2020-06-16 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: rubygems-tasks
14
+ name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: '0.2'
19
+ version: '2.0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '0.2'
30
- - !ruby/object:Gem::Dependency
31
- name: rspec
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
36
- - !ruby/object:Gem::Version
37
- version: '2.4'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: '2.4'
46
- - !ruby/object:Gem::Dependency
47
- name: yard
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- version: '0.8'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '0.8'
26
+ version: '2.0'
62
27
  description: Adds support for calculating Cyclic Redundancy Check (CRC) to the Digest
63
28
  module.
64
29
  email: postmodern.mod3@gmail.com
65
30
  executables: []
66
- extensions: []
31
+ extensions:
32
+ - ext/digest/Rakefile
67
33
  extra_rdoc_files:
68
34
  - ChangeLog.md
69
35
  - LICENSE.txt
70
36
  - README.md
71
37
  files:
72
- - .gemtest
73
- - .gitignore
74
- - .rspec
75
- - .yardopts
38
+ - ".gitignore"
39
+ - ".rspec"
40
+ - ".travis.yml"
41
+ - ".yardopts"
76
42
  - ChangeLog.md
43
+ - Gemfile
77
44
  - LICENSE.txt
78
45
  - README.md
79
46
  - Rakefile
47
+ - benchmarks.rb
80
48
  - digest-crc.gemspec
49
+ - ext/digest/Rakefile
50
+ - ext/digest/compat/ruby.h
51
+ - ext/digest/crc12_3gpp/crc12_3gpp.c
52
+ - ext/digest/crc12_3gpp/crc12_3gpp.h
53
+ - ext/digest/crc12_3gpp/crc12_3gpp_ext.c
54
+ - ext/digest/crc12_3gpp/extconf.rb
55
+ - ext/digest/crc15/crc15.c
56
+ - ext/digest/crc15/crc15.h
57
+ - ext/digest/crc15/crc15_ext.c
58
+ - ext/digest/crc15/extconf.rb
59
+ - ext/digest/crc16/crc16.c
60
+ - ext/digest/crc16/crc16.h
61
+ - ext/digest/crc16/crc16_ext.c
62
+ - ext/digest/crc16/extconf.rb
63
+ - ext/digest/crc16_ccitt/crc16_ccitt.c
64
+ - ext/digest/crc16_ccitt/crc16_ccitt.h
65
+ - ext/digest/crc16_ccitt/crc16_ccitt_ext.c
66
+ - ext/digest/crc16_ccitt/extconf.rb
67
+ - ext/digest/crc16_dnp/crc16_dnp.c
68
+ - ext/digest/crc16_dnp/crc16_dnp.h
69
+ - ext/digest/crc16_dnp/crc16_dnp_ext.c
70
+ - ext/digest/crc16_dnp/extconf.rb
71
+ - ext/digest/crc16_genibus/crc16_genibus.c
72
+ - ext/digest/crc16_genibus/crc16_genibus.h
73
+ - ext/digest/crc16_genibus/crc16_genibus_ext.c
74
+ - ext/digest/crc16_genibus/extconf.rb
75
+ - ext/digest/crc16_kermit/crc16_kermit.c
76
+ - ext/digest/crc16_kermit/crc16_kermit.h
77
+ - ext/digest/crc16_kermit/crc16_kermit_ext.c
78
+ - ext/digest/crc16_kermit/extconf.rb
79
+ - ext/digest/crc16_modbus/crc16_modbus.c
80
+ - ext/digest/crc16_modbus/crc16_modbus.h
81
+ - ext/digest/crc16_modbus/crc16_modbus_ext.c
82
+ - ext/digest/crc16_modbus/extconf.rb
83
+ - ext/digest/crc16_usb/crc16_usb.c
84
+ - ext/digest/crc16_usb/crc16_usb.h
85
+ - ext/digest/crc16_usb/crc16_usb_ext.c
86
+ - ext/digest/crc16_usb/extconf.rb
87
+ - ext/digest/crc16_x_25/crc16_x_25.c
88
+ - ext/digest/crc16_x_25/crc16_x_25.h
89
+ - ext/digest/crc16_x_25/crc16_x_25_ext.c
90
+ - ext/digest/crc16_x_25/extconf.rb
91
+ - ext/digest/crc16_xmodem/crc16_xmodem.c
92
+ - ext/digest/crc16_xmodem/crc16_xmodem.h
93
+ - ext/digest/crc16_xmodem/crc16_xmodem_ext.c
94
+ - ext/digest/crc16_xmodem/extconf.rb
95
+ - ext/digest/crc16_zmodem/crc16_zmodem.c
96
+ - ext/digest/crc16_zmodem/crc16_zmodem.h
97
+ - ext/digest/crc16_zmodem/crc16_zmodem_ext.c
98
+ - ext/digest/crc16_zmodem/extconf.rb
99
+ - ext/digest/crc24/crc24.c
100
+ - ext/digest/crc24/crc24.h
101
+ - ext/digest/crc24/crc24_ext.c
102
+ - ext/digest/crc24/extconf.rb
103
+ - ext/digest/crc32/crc32.c
104
+ - ext/digest/crc32/crc32.h
105
+ - ext/digest/crc32/crc32_ext.c
106
+ - ext/digest/crc32/extconf.rb
107
+ - ext/digest/crc32_bzip2/crc32_bzip2.c
108
+ - ext/digest/crc32_bzip2/crc32_bzip2.h
109
+ - ext/digest/crc32_bzip2/crc32_bzip2_ext.c
110
+ - ext/digest/crc32_bzip2/extconf.rb
111
+ - ext/digest/crc32_jam/crc32_jam.c
112
+ - ext/digest/crc32_jam/crc32_jam.h
113
+ - ext/digest/crc32_jam/crc32_jam_ext.c
114
+ - ext/digest/crc32_jam/extconf.rb
115
+ - ext/digest/crc32_mpeg/crc32_mpeg.c
116
+ - ext/digest/crc32_mpeg/crc32_mpeg.h
117
+ - ext/digest/crc32_mpeg/crc32_mpeg_ext.c
118
+ - ext/digest/crc32_mpeg/extconf.rb
119
+ - ext/digest/crc32_posix/crc32_posix.c
120
+ - ext/digest/crc32_posix/crc32_posix.h
121
+ - ext/digest/crc32_posix/crc32_posix_ext.c
122
+ - ext/digest/crc32_posix/extconf.rb
123
+ - ext/digest/crc32_xfer/crc32_xfer.c
124
+ - ext/digest/crc32_xfer/crc32_xfer.h
125
+ - ext/digest/crc32_xfer/crc32_xfer_ext.c
126
+ - ext/digest/crc32_xfer/extconf.rb
127
+ - ext/digest/crc32c/crc32c.c
128
+ - ext/digest/crc32c/crc32c.h
129
+ - ext/digest/crc32c/crc32c_ext.c
130
+ - ext/digest/crc32c/extconf.rb
131
+ - ext/digest/crc5/crc5.c
132
+ - ext/digest/crc5/crc5.h
133
+ - ext/digest/crc5/crc5_ext.c
134
+ - ext/digest/crc5/extconf.rb
135
+ - ext/digest/crc64/crc64.c
136
+ - ext/digest/crc64/crc64.h
137
+ - ext/digest/crc64/crc64_ext.c
138
+ - ext/digest/crc64/extconf.rb
139
+ - ext/digest/crc64_jones/crc64_jones.c
140
+ - ext/digest/crc64_jones/crc64_jones.h
141
+ - ext/digest/crc64_jones/crc64_jones_ext.c
142
+ - ext/digest/crc64_jones/extconf.rb
143
+ - ext/digest/crc64_xz/crc64_xz.c
144
+ - ext/digest/crc64_xz/crc64_xz.h
145
+ - ext/digest/crc64_xz/crc64_xz_ext.c
146
+ - ext/digest/crc64_xz/extconf.rb
147
+ - ext/digest/crc8/crc8.c
148
+ - ext/digest/crc8/crc8.h
149
+ - ext/digest/crc8/crc8_ext.c
150
+ - ext/digest/crc8/extconf.rb
151
+ - ext/digest/crc8_1wire/crc8_1wire.c
152
+ - ext/digest/crc8_1wire/crc8_1wire.h
153
+ - ext/digest/crc8_1wire/crc8_1wire_ext.c
154
+ - ext/digest/crc8_1wire/extconf.rb
81
155
  - gemspec.yml
82
156
  - lib/digest/crc.rb
83
157
  - lib/digest/crc1.rb
158
+ - lib/digest/crc15.rb
84
159
  - lib/digest/crc16.rb
85
160
  - lib/digest/crc16_ccitt.rb
86
161
  - lib/digest/crc16_dnp.rb
162
+ - lib/digest/crc16_genibus.rb
163
+ - lib/digest/crc16_kermit.rb
87
164
  - lib/digest/crc16_modbus.rb
88
165
  - lib/digest/crc16_qt.rb
89
166
  - lib/digest/crc16_usb.rb
167
+ - lib/digest/crc16_x_25.rb
90
168
  - lib/digest/crc16_xmodem.rb
91
169
  - lib/digest/crc16_zmodem.rb
92
170
  - lib/digest/crc24.rb
93
171
  - lib/digest/crc32.rb
172
+ - lib/digest/crc32_bzip2.rb
173
+ - lib/digest/crc32_jam.rb
94
174
  - lib/digest/crc32_mpeg.rb
175
+ - lib/digest/crc32_posix.rb
176
+ - lib/digest/crc32_xfer.rb
95
177
  - lib/digest/crc32c.rb
96
178
  - lib/digest/crc5.rb
97
179
  - lib/digest/crc64.rb
180
+ - lib/digest/crc64_jones.rb
181
+ - lib/digest/crc64_xz.rb
98
182
  - lib/digest/crc8.rb
99
183
  - lib/digest/crc8_1wire.rb
184
+ - spec/crc15_spec.rb
100
185
  - spec/crc16_ccitt_spec.rb
186
+ - spec/crc16_genibus_spec.rb
187
+ - spec/crc16_kermit_spec.rb
101
188
  - spec/crc16_modbus_spec.rb
102
189
  - spec/crc16_qt_spec.rb
103
190
  - spec/crc16_spec.rb
104
191
  - spec/crc16_usb_spec.rb
192
+ - spec/crc16_x_25_spec.rb
105
193
  - spec/crc16_xmodem_spec.rb
106
194
  - spec/crc16_zmodem_spec.rb
107
195
  - spec/crc1_spec.rb
108
196
  - spec/crc24_spec.rb
197
+ - spec/crc32_bzip2_spec.rb
198
+ - spec/crc32_jam_spec.rb
109
199
  - spec/crc32_mpeg_spec.rb
200
+ - spec/crc32_posix_spec.rb
110
201
  - spec/crc32_spec.rb
202
+ - spec/crc32_xfer_spec.rb
111
203
  - spec/crc32c_spec.rb
112
204
  - spec/crc5_spec.rb
205
+ - spec/crc64_jones_spec.rb
113
206
  - spec/crc64_spec.rb
207
+ - spec/crc64_xz_spec.rb
114
208
  - spec/crc8_1wire_spec.rb
115
209
  - spec/crc8_spec.rb
116
210
  - spec/crc_examples.rb
@@ -119,26 +213,29 @@ files:
119
213
  homepage: https://github.com/postmodern/digest-crc#readme
120
214
  licenses:
121
215
  - MIT
216
+ metadata:
217
+ documentation_uri: https://rubydoc.info/gems/digest-crc
218
+ source_code_uri: https://github.com/postmodern/digest-crc
219
+ bug_tracker_uri: https://github.com/postmodern/digest-crc/issues
220
+ changelog_uri: https://github.com/postmodern/digest-crc/blob/master/ChangeLog.md
122
221
  post_install_message:
123
222
  rdoc_options: []
124
223
  require_paths:
224
+ - ext
125
225
  - lib
126
226
  required_ruby_version: !ruby/object:Gem::Requirement
127
- none: false
128
227
  requirements:
129
- - - ! '>='
228
+ - - ">="
130
229
  - !ruby/object:Gem::Version
131
230
  version: '0'
132
231
  required_rubygems_version: !ruby/object:Gem::Requirement
133
- none: false
134
232
  requirements:
135
- - - ! '>='
233
+ - - ">="
136
234
  - !ruby/object:Gem::Version
137
235
  version: '0'
138
236
  requirements: []
139
- rubyforge_project:
140
- rubygems_version: 1.8.24
237
+ rubygems_version: 3.0.3
141
238
  signing_key:
142
- specification_version: 3
239
+ specification_version: 4
143
240
  summary: A Cyclic Redundancy Check (CRC) library for Ruby.
144
241
  test_files: []