class Gemnigma::Decrypt

Public Class Methods

new() click to toggle source
# File lib/Gemnigma/decrypt.rb, line 7
def initialize
  @messages = Messages.new
end

Public Instance Methods

get_cmd_args() click to toggle source
# File lib/Gemnigma/decrypt.rb, line 11
def get_cmd_args
  if ARGV.length < 5
    @messages.few_args
    return
  end

  if ARGV.length == 5
    @input_file = ARGV[1]
    @output_file = ARGV[2]
    @secret_key = ARGV[3]
    @date_gen = ARGV[4]
    validate { decrypt_file(@input_file, @output_file,@secret_key,@date_gen) }
  end

  if ARGV.length > 5
    @messages.too_much_args
    return
  end

end

Private Instance Methods

decrypt_file(input, output, key, date) click to toggle source
# File lib/Gemnigma/decrypt.rb, line 42
def decrypt_file(input, output, key, date)
  unless true_key?(key)
    puts "#{key} doesn't match the specified key format"
    puts "Exiting..."
    return
  end

  unless true_date?(date)
    puts "#{date} doesn't match the specified date format"
    puts "Exiting..."
    return
  end
  
  encrypted_file = File.open(input, "r+")
  decrypted_file = File.open(output, "w+")
  input_content = encrypted_file.read

  decrypt = RotatorDecrypt.new(Key.new(key.to_i))

  decrypted_file.write(decrypt.rot_decrypt(input_content))

  encrypted_file.close
  decrypted_file.close
  @messages.success_message(@output_file, @secret_key, @date_gen)
end
true_date?(date) click to toggle source
# File lib/Gemnigma/decrypt.rb, line 38
def true_date?(date)
  (date.to_i ** 2).to_s.chars.last(4).map(&:to_i) == Offset.new.offset
end
true_key?(key) click to toggle source
# File lib/Gemnigma/decrypt.rb, line 34
def true_key?(key)
  key.length == 5 && key.match(/\d\d\d\d\d/) ? true : false
end