class Obfuscate::Crypt

Constants

Base64Error
UnsupportedModeError

Attributes

config[R]
exec_config[R]

Public Class Methods

new(config) click to toggle source

New instance of Obfuscate::Crypt

@param [Obfuscate::Config]

# File lib/obfuscate/crypt.rb, line 30
def initialize(config)
  @crypt = Crypt::Blowfish.new( config.salt )
  @config = config
end

Public Instance Methods

clarify(text, override_mode = nil) click to toggle source

Clarify text

@param [Symbol] override_mode to explicit set clarify mode to :string or :block @return [String]

# File lib/obfuscate/crypt.rb, line 64
def clarify(text, override_mode = nil)

  @exec_config = @config.apply(:mode => (override_mode || @config.mode))
  obfuscated = text.to_s

  if @exec_config.encode
    obfuscated << "=" if @exec_config.remove_trailing_equal?
    obfuscated = Base64.urlsafe_decode64(obfuscated)
  end

  begin
    if @exec_config.mode == :string
      @crypt.decrypt_string(obfuscated)
    elsif @exec_config.mode == :block
      @crypt.decrypt_block(obfuscated).strip
    else
      raise UnsupportedModeError.new("Unknown mode: #{@exec_config.mode}")
    end
  rescue ArgumentError => ex
    raise Base64Error.new("Cannot decode #{text}") if ex.message == 'invalid base64'

    raise ex
  rescue => ex
    raise Base64Error.new("Cannot decode #{text}") if ex.message == "undefined method `%'"

    raise ex
  end
end
obfuscate(text, override_mode = nil) click to toggle source

Obfuscate text

@param [Symbol] override_mode to explicit set obfuscate mode to :string or :block @return [String]

# File lib/obfuscate/crypt.rb, line 39
def obfuscate(text, override_mode = nil)

  @exec_config = @config.apply(:mode => (override_mode || @config.mode) )

  obfuscated = nil
  if @exec_config.mode == :string
    obfuscated = @crypt.encrypt_string(text)
  elsif @exec_config.mode == :block
    obfuscated = @crypt.encrypt_block(text.to_s.ljust(8))
  else
    raise "Unsupport Mode"
  end

  if @exec_config.encode
    obfuscated = Base64.urlsafe_encode64(obfuscated).strip
    obfuscated = obfuscated.chomp("=") if @exec_config.remove_trailing_equal?
  end

  obfuscated
end