Class: Digest::CRC
Overview
Base class for all CRC algorithms.
Constant Summary collapse
- INIT_CRC =
The initial value of the CRC checksum
0x00
- XOR_MASK =
The XOR mask to apply to the resulting CRC checksum
0x00
- WIDTH =
The bit width of the CRC checksum
0
- TABLE =
Default place holder CRC table
[].freeze
Class Method Summary collapse
-
.checksum(data) ⇒ Integer
Calculates the CRC checksum.
-
.pack(crc) ⇒ String
abstract
Packs the given CRC checksum.
Instance Method Summary collapse
- #<<(data) ⇒ Object
-
#block_length ⇒ 1
The input block length.
-
#checksum ⇒ Integer
The resulting CRC checksum.
-
#digest_length ⇒ Integer
The length of the digest.
-
#finish ⇒ Object
Finishes the CRC checksum calculation.
-
#initialize ⇒ CRC
constructor
Initializes the CRC checksum.
-
#reset ⇒ Integer
Resets the CRC checksum.
-
#update(data) ⇒ Object
abstract
Updates the CRC checksum with the given data.
Constructor Details
#initialize ⇒ CRC
Initializes the CRC checksum.
57 58 59 60 61 62 63 64 |
# File 'lib/digest/crc.rb', line 57 def initialize @init_crc = self.class.const_get(:INIT_CRC) @xor_mask = self.class.const_get(:XOR_MASK) @width = self.class.const_get(:WIDTH) @table = self.class.const_get(:TABLE) reset end |
Class Method Details
.checksum(data) ⇒ Integer
Calculates the CRC checksum.
32 33 34 35 36 37 |
# File 'lib/digest/crc.rb', line 32 def self.checksum(data) crc = self.new crc << data return crc.checksum end |
.pack(crc) ⇒ String
This method is abstract.
Packs the given CRC checksum.
50 51 52 |
# File 'lib/digest/crc.rb', line 50 def self.pack(crc) raise(NotImplementedError,"#{self.class}##{__method__} not implemented") end |
Instance Method Details
#<<(data) ⇒ Object
100 101 102 103 |
# File 'lib/digest/crc.rb', line 100 def <<(data) update(data) return self end |
#block_length ⇒ 1
The input block length.
71 72 73 |
# File 'lib/digest/crc.rb', line 71 def block_length 1 end |
#checksum ⇒ Integer
The resulting CRC checksum.
121 122 123 |
# File 'lib/digest/crc.rb', line 121 def checksum @crc ^ @xor_mask end |
#digest_length ⇒ Integer
The length of the digest.
81 82 83 |
# File 'lib/digest/crc.rb', line 81 def digest_length (@width / 8.0).ceil end |
#finish ⇒ Object
Finishes the CRC checksum calculation.
130 131 132 |
# File 'lib/digest/crc.rb', line 130 def finish self.class.pack(checksum) end |
#reset ⇒ Integer
Resets the CRC checksum.
111 112 113 |
# File 'lib/digest/crc.rb', line 111 def reset @crc = @init_crc end |
#update(data) ⇒ Object
This method is abstract.
Updates the CRC checksum with the given data.
93 94 95 |
# File 'lib/digest/crc.rb', line 93 def update(data) raise(NotImplementedError,"#{self.class}##{__method__} not implemented") end |