class EnigmaEncrypto::Crack

Public Class Methods

new() click to toggle source
# File lib/enigma_encrypto/crack.rb, line 7
def initialize
  @file_handler = FileHandler.new
  @rotator = Rotator.new
  @rotation_num_gen = RotationNumGen.new
end

Public Instance Methods

action() click to toggle source
# File lib/enigma_encrypto/crack.rb, line 49
def action
  exit if !get_command_args
  exit if !check_command_args
  get_crack_key
  crack
  @key.map!{|digit| "%d" % digit }
  @key = Serialize.new(@key).action
  puts "Cracked #{@encrypted} and created #{@cracked} with key #{@key} and date #{@date}."
  true
end
check_command_args() click to toggle source
# File lib/enigma_encrypto/crack.rb, line 24
def check_command_args
  if ("%06d" % (@date.to_i)).size != 6 || @date.to_i <= 0
    puts "Incorrect date entered"
    return false
  end
  operation = @file_handler.check_file_useability(@encrypted, @cracked)
  return false if operation == false || operation == "c"
  File.truncate(@cracked, 0) if operation == "w"
  true
end
crack() click to toggle source
# File lib/enigma_encrypto/crack.rb, line 42
def crack    
  @reverse_array = @rotation_num_gen.crack_num_arr(@key, @offset)
  @opened_encrypted.rewind
  crack_encrypted
  @opened_encrypted.close
end
get_command_args() click to toggle source
# File lib/enigma_encrypto/crack.rb, line 13
def get_command_args
  if ARGV.length != 3
    puts "Oooops!\nIncorrect number of arguments supplied.\nTry again."
    false
  else
    @encrypted = ARGV[0]
    @cracked = ARGV[1]
    @date = ARGV[2]
  end
end
get_crack_key() click to toggle source
# File lib/enigma_encrypto/crack.rb, line 35
def get_crack_key
  @opened_encrypted = @file_handler.read(@encrypted)
  @length = @opened_encrypted.size
  @offset = DateOffsetGen.new.get_decrypter_offset(@date)
  @key = Cracker.new(@opened_encrypted, @length, @offset).get_key
end

Private Instance Methods

crack_encrypted() click to toggle source
# File lib/enigma_encrypto/crack.rb, line 62
def crack_encrypted
  reverse_array_index = 0
  while @length > 0
    character_in_encry = @opened_encrypted.getc
    reverse_encrypted(character_in_encry, reverse_array_index)
    reverse_array_index += 1
    reverse_array_index = 0 if reverse_array_index == 4
    @length -= 1
  end
end
reverse_encrypted(character, index) click to toggle source
# File lib/enigma_encrypto/crack.rb, line 73
def reverse_encrypted(character, index)
  cracked_char = @rotator.reverse_text(character, @reverse_array[index])
  @file_handler.writer(@cracked, cracked_char)
end