class ZSteg::Checker::WBStego::Result

Attributes

color[RW]

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/zsteg/checker/wbstego.rb, line 17
def initialize *args
  super
  if self.size.is_a?(String)
    self.size = (self.size[0,3] + "\x00").unpack('V')[0]
  end
  self.even ||= false
  #self.encrypted ||= false
  if ext[0,2] == "\x00\xff"
    # wbStego 4.x header
    self.hdr  = data[0,ext[2].ord] # 3rd ext byte is hdr len
    self.data = data[hdr.size..-1]
    self.ext  = nil                # encrypted files have no ext
    self.enc  = ENCRYPTIONS[hdr[0].ord] || "unknown ##{hdr[0].ord}"
  elsif (cb=ext[0].ord) & 0xc0 != 0
    # wbStego 2.x/3.x controlbyte
    self.controlbyte = ext[0]
    self.data = ext[1..-1] + data
    self.ext  = nil                # have ext but its encrypted/mixed with data
    self.mix  = true if cb & 0x40 != 0
    self.enc  = "wbStego 2.x/3.x" if cb & 0x80 != 0
  end
end

Public Instance Methods

to_s() click to toggle source
# File lib/zsteg/checker/wbstego.rb, line 40
def to_s
  s = inspect.
      sub("#<struct #{self.class.to_s}", "<wbStego").
      gsub(/, \w+=nil/,'')

  color = @color

  if ext && !valid_ext?
    s.sub!(data.inspect, data[0,10].inspect+"...") if data && data.size>13
    color ||= :gray
  else
    s.sub!(data.inspect, data[0,10].inspect+"...") if data && data.size>13 && enc
    color ||= :bright_red
  end
  s.send(color)
end
valid_ext?() click to toggle source

XXX require that file extension be 7-bit ASCII

# File lib/zsteg/checker/wbstego.rb, line 58
def valid_ext?
  ext =~ /\A[\x20-\x7e]+\Z/ && !ext['*'] && !ext['?']
end