Method: Gel::Support::Tar::TarWriter#add_file_signed

Defined in:
lib/gel/support/tar/tar_writer.rb

#add_file_signed(name, mode, signer) ⇒ Object

Adds name with permissions mode to the tar, yielding io for writing the file. The signer is used to add a digest file using its digest_algorithm per add_file_digest and a cryptographic signature in name.sig. If the signer has no key only the checksum file is added.

Returns the digest.



177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
# File 'lib/gel/support/tar/tar_writer.rb', line 177

def add_file_signed name, mode, signer
  digest_algorithms = [
    signer.digest_algorithm,
    Digest::SHA512,
  ].compact.uniq

  digests = add_file_digest name, mode, digest_algorithms do |io|
    yield io
  end

  signature_digest = digests.values.compact.find do |digest|
    digest_name =
      if digest.respond_to? :name then
        digest.name
      else
        /::([^:]+)$/ =~ digest.class.name
        $1
      end

    digest_name == signer.digest_name
  end

  if signer.key then
    signature = signer.sign signature_digest.digest

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

  digests
end