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