Class: Encrypter
- Defined in:
- lib/quiz1/t/solutions/Niklas Frykholm/solitaire.rb
Instance Method Summary collapse
- #decrypt(s) ⇒ Object
- #encrypt(s) ⇒ Object
-
#initialize(keystream) ⇒ Encrypter
constructor
A new instance of Encrypter.
- #mod(c) ⇒ Object
- #process(s, &combiner) ⇒ Object
- #sanitize(s) ⇒ Object
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 |