class GZippedTar::Tar::WriteSignedFile

Attributes

mode[R]
name[R]
signer[R]
writer[R]

Public Class Methods

call(writer, name, mode, signer, &block) click to toggle source
# File lib/gzipped_tar/tar/write_signed_file.rb, line 4
def self.call(writer, name, mode, signer, &block)
  new(writer, name, mode, signer).call(&block)
end
new(writer, name, mode, signer) click to toggle source
# File lib/gzipped_tar/tar/write_signed_file.rb, line 8
def initialize(writer, name, mode, signer)
  @writer = writer
  @name   = name
  @mode   = mode
  @signer = signer
end

Public Instance Methods

call(&block) click to toggle source
# File lib/gzipped_tar/tar/write_signed_file.rb, line 15
def call(&block)
  add_file_digest(&block)

  raise "no #{signer.digest_name} in #{digests.values.compact}" unless digest

  write_signature if signer.key

  digests
end

Private Instance Methods

add_file_digest(&block) click to toggle source
# File lib/gzipped_tar/tar/write_signed_file.rb, line 29
def add_file_digest(&block)
  writer.add_file name, mode do |io|
    GZippedTar::Tar::DigestIO.wrap io, digests, &block
  end
end
algorithms() click to toggle source
# File lib/gzipped_tar/tar/write_signed_file.rb, line 35
def algorithms
  [
    signer.digest_algorithm,
    Digest::SHA512
  ].compact.uniq
end
digest() click to toggle source
# File lib/gzipped_tar/tar/write_signed_file.rb, line 42
def digest
  @digest ||= digests.values.compact.detect do |digest|
    digest_name(digest) == signer.digest_name
  end
end
digest_name(instance) click to toggle source
# File lib/gzipped_tar/tar/write_signed_file.rb, line 58
def digest_name(instance)
  if instance.respond_to? :name
    instance.name
  else
    instance.class.name[/::([^:]+)$/, 1]
  end
end
digests() click to toggle source
# File lib/gzipped_tar/tar/write_signed_file.rb, line 48
def digests
  @digests ||= begin
    digests = algorithms.collect(&:new).collect do |digest|
      [digest_name(digest), digest]
    end

    Hash[*digests.flatten]
  end
end
write_signature() click to toggle source
# File lib/gzipped_tar/tar/write_signed_file.rb, line 66
def write_signature
  signature = signer.sign digest.digest

  writer.add_file_simple "#{name}.sig", 0o444, signature.length do |io|
    io.write signature
  end
end