class Tus::Checksum

Generates various checksums for given IO objects. The following algorithms are supported:

Constants

CHUNK_SIZE

Attributes

algorithm[R]

Public Class Methods

generate(algorithm, input) click to toggle source
# File lib/tus/checksum.rb, line 18
def self.generate(algorithm, input)
  new(algorithm).generate(input)
end
new(algorithm) click to toggle source
# File lib/tus/checksum.rb, line 22
def initialize(algorithm)
  @algorithm = algorithm
end

Public Instance Methods

generate(io) click to toggle source
# File lib/tus/checksum.rb, line 30
def generate(io)
  hash = send("generate_#{algorithm}", io)
  io.rewind
  hash
end
match?(checksum, io) click to toggle source
# File lib/tus/checksum.rb, line 26
def match?(checksum, io)
  generate(io) == checksum
end

Private Instance Methods

digest(name, io) click to toggle source
# File lib/tus/checksum.rb, line 68
def digest(name, io)
  require "digest"
  digest = Digest.const_get(name).new
  while (data = io.read(CHUNK_SIZE, buffer ||= String.new))
    digest.update(data)
  end
  digest.base64digest
end
generate_crc32(io) click to toggle source
# File lib/tus/checksum.rb, line 58
def generate_crc32(io)
  require "zlib"
  require "base64"
  crc = Zlib.crc32("")
  while (data = io.read(CHUNK_SIZE, buffer ||= String.new))
    crc = Zlib.crc32(data, crc)
  end
  Base64.strict_encode64(crc.to_s)
end
generate_md5(io) click to toggle source
# File lib/tus/checksum.rb, line 54
def generate_md5(io)
  digest(:MD5, io)
end
generate_sha1(io) click to toggle source
# File lib/tus/checksum.rb, line 38
def generate_sha1(io)
  digest(:SHA1, io)
end
generate_sha256(io) click to toggle source
# File lib/tus/checksum.rb, line 42
def generate_sha256(io)
  digest(:SHA256, io)
end
generate_sha384(io) click to toggle source
# File lib/tus/checksum.rb, line 46
def generate_sha384(io)
  digest(:SHA384, io)
end
generate_sha512(io) click to toggle source
# File lib/tus/checksum.rb, line 50
def generate_sha512(io)
  digest(:SHA512, io)
end