module SyncWrap::HashSupport

Support module for using a crytographic hash to verify the integrity of a file, for example a downloaded package.

Protected Instance Methods

guess_hash_method( hash ) click to toggle source
# File lib/syncwrap/hash_support.rb, line 45
def guess_hash_method( hash )
  case hash.length
  when 32
  when 40
  when 56
  when 64
  when 96
  when 128
hash_verify( hash, file, opts = {} ) click to toggle source

Enqueue a bash command to verify the specified file using the given hash. This command will fail if the file does not match. The hash :method can be specified in opts (i.e. :sha256) or will be guessed from the provided hex-encoded hash string length. Other opts are as per SyncWrap::Component#sh, though options accept, pipefail and error are ignored. Use of :user can allow this command to be merged.

# File lib/syncwrap/hash_support.rb, line 32
    def hash_verify( hash, file, opts = {} )
      opts = opts.dup
      mth = ( opts.delete(:method) || guess_hash_method( hash ) ) or
        raise( "Hash method unspecified and hash length " +
               "#{hash.length} is non-standard" )

      [ :accept, :pipefail, :error ].each { |k| opts.delete( k ) }

      sh( "        echo "#{hash}  #{file}" | /usr/bin/#{mth}sum -c -
", opts )