class MagicNumber

Constants

SIGNATURES

Public Class Methods

check_begin_sign(file, signature) click to toggle source
# File lib/magic_number.rb, line 236
def self.check_begin_sign(file, signature)
        if signature.has_key?("sign_begin")
                i = 0
                while i < signature['sign_begin'].count
                        sign = MagicNumber.read_beginning_bytes(file, signature['length_begin'][i])
                        return true if (sign == signature['sign_begin'][i])
                        i += 1
                end

                return false
        else
                return true
        end
end
check_end_sign(file, signature) click to toggle source
# File lib/magic_number.rb, line 251
def self.check_end_sign(file, signature)
        if signature.has_key?("sign_end")
                sign = MagicNumber.read_end_bytes(file, signature['offset_end'], signature['length_end'])
                return (sign == signature['sign_end'])
        else
                return true
        end
end
get_signature(ext) click to toggle source
# File lib/magic_number.rb, line 217
def self.get_signature(ext)
        return SIGNATURES[ext]
end
is_real?(file_path) click to toggle source

@see en.wikipedia.org/wiki/List_of_file_signatures @since 0.0.1 @param [String] file_path Path to analyzable file @return [boolean] wether the file content is in accordance with the extension

# File lib/magic_number.rb, line 226
def self.is_real?(file_path)
        file = File.new(file_path, 'r')
        signature = MagicNumber.get_signature(file_path.split(".").last.downcase)             

        MagicNumber.check_begin_sign(file, signature)
        MagicNumber.check_end_sign(file, signature)

        file.close
end
read_beginning_bytes(file, length) click to toggle source
# File lib/magic_number.rb, line 262
def self.read_beginning_bytes(file, length)
        file.rewind
        return file.readpartial(length).unpack("H*").first
end
read_end_bytes(file, offset, length) click to toggle source
# File lib/magic_number.rb, line 267
def self.read_end_bytes(file, offset, length)
        file.seek(length, offset)
        return file.read.unpack("H*").first
end