Class: Encrypter

Inherits:
Object show all
Defined in:
lib/quiz1/t/solutions/Niklas Frykholm/solitaire.rb

Instance Method Summary collapse

Constructor Details

#initialize(keystream) ⇒ Encrypter

Returns a new instance of Encrypter.



88
89
90
# File 'lib/quiz1/t/solutions/Niklas Frykholm/solitaire.rb', line 88

def initialize(keystream)
  @keystream = keystream
end

Instance Method Details

#decrypt(s) ⇒ Object



126
127
128
# File 'lib/quiz1/t/solutions/Niklas Frykholm/solitaire.rb', line 126

def decrypt(s)
  return process(s) {|c, key| 64 + mod(c -key)}
end

#encrypt(s) ⇒ Object



122
123
124
# File 'lib/quiz1/t/solutions/Niklas Frykholm/solitaire.rb', line 122

def encrypt(s)
  return process(s) {|c, key| 64 + mod(c + key - 128)}
end

#mod(c) ⇒ Object



101
102
103
104
105
# File 'lib/quiz1/t/solutions/Niklas Frykholm/solitaire.rb', line 101

def mod(c)
  return c - 26 if c > 26
  return c + 26 if c < 1
  return c
end

#process(s, &combiner) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/quiz1/t/solutions/Niklas Frykholm/solitaire.rb', line 107

def process(s, &combiner)
  s = sanitize(s)
  out = ""
  s.each_byte { |c|
    if c >= ?A and c <= ?Z
      key = @keystream.get
      res = combiner.call(c, key[0])
      out << res.chr
    else
      out << c.chr
    end
  }
  return out
end

#sanitize(s) ⇒ Object



92
93
94
95
96
97
98
99
# File 'lib/quiz1/t/solutions/Niklas Frykholm/solitaire.rb', line 92

def sanitize(s)
  s = s.upcase
  s = s.gsub(/[^A-Z]/, "")
  s = s + "X" * ((5 - s.size % 5) % 5)
  out = ""
  (s.size / 5).times {|i| out << s[i*5,5] << " "}
  return out
end