corrade-vassal – Diff between revs 13 and 16

Subversion Repositories:
Rev:
Show entire fileIgnore whitespace
Rev 13 Rev 16
Line 10... Line 10...
10 using System.Text; 10 using System.Text;
11 using System.Threading.Tasks; 11 using System.Threading.Tasks;
Line 12... Line 12...
12   12  
13 namespace wasSharp 13 namespace wasSharp
14 { 14 {
15 public class Cryptography 15 public static class Cryptography
16 { 16 {
17 /////////////////////////////////////////////////////////////////////////// 17 ///////////////////////////////////////////////////////////////////////////
18 // Copyright (C) Wizardry and Steamworks 2014 - License: GNU GPLv3 // 18 // Copyright (C) Wizardry and Steamworks 2014 - License: GNU GPLv3 //
19 /////////////////////////////////////////////////////////////////////////// 19 ///////////////////////////////////////////////////////////////////////////
Line 25... Line 25...
25 /// <param name="plugs">the letter representing the start character for the rotor</param> 25 /// <param name="plugs">the letter representing the start character for the rotor</param>
26 /// <param name="reflector">any one of: B, b, C, c</param> 26 /// <param name="reflector">any one of: B, b, C, c</param>
27 /// <returns>either a decrypted or encrypted string</returns> 27 /// <returns>either a decrypted or encrypted string</returns>
28 public static string ENIGMA(string message, char[] rotors, char[] plugs, char reflector) 28 public static string ENIGMA(string message, char[] rotors, char[] plugs, char reflector)
29 { 29 {
30 Dictionary<char, char[]> def_rotors = new Dictionary<char, char[]> 30 var def_rotors = new Dictionary<char, char[]>
31 { 31 {
32 { 32 {
33 '1', new[] 33 '1', new[]
34 { 34 {
35 'e', 'k', 'm', 'f', 'l', 35 'e', 'k', 'm', 'f', 'l',
Line 139... Line 139...
139 'd' 139 'd'
140 } 140 }
141 } 141 }
142 }; 142 };
Line 143... Line 143...
143   143  
144 Dictionary<char, char[]> def_reflectors = new Dictionary<char, char[]> 144 var def_reflectors = new Dictionary<char, char[]>
145 { 145 {
146 { 146 {
147 'B', new[] 147 'B', new[]
148 { 148 {
Line 180... Line 180...
180 } 180 }
181 } 181 }
182 }; 182 };
Line 183... Line 183...
183   183  
184 // Setup rotors from plugs. 184 // Setup rotors from plugs.
185 foreach (char rotor in rotors) 185 foreach (var rotor in rotors)
186 { 186 {
187 char plug = plugs[Array.IndexOf(rotors, rotor)]; 187 var plug = plugs[Array.IndexOf(rotors, rotor)];
188 int i = Array.IndexOf(def_rotors[rotor], plug); 188 var i = Array.IndexOf(def_rotors[rotor], plug);
189 if (i.Equals(0)) continue; 189 if (i.Equals(0)) continue;
190 def_rotors[rotor] = Arrays.ConcatenateArrays(new[] {plug}, 190 def_rotors[rotor] = Arrays.ConcatenateArrays(new[] {plug},
191 Arrays.GetSubArray(Arrays.DeleteSubArray(def_rotors[rotor], i, i), i, -1), 191 Arrays.GetSubArray(Arrays.DeleteSubArray(def_rotors[rotor], i, i), i, -1),
192 Arrays.GetSubArray(Arrays.DeleteSubArray(def_rotors[rotor], i + 1, -1), 0, i - 1)); 192 Arrays.GetSubArray(Arrays.DeleteSubArray(def_rotors[rotor], i + 1, -1), 0, i - 1));
Line 193... Line 193...
193 } 193 }
194   194  
195 StringBuilder result = new StringBuilder(); 195 var result = new StringBuilder();
196 foreach (char c in message) 196 foreach (var c in message)
197 { 197 {
198 if (!char.IsLetter(c)) 198 if (!char.IsLetter(c))
199 { 199 {
200 result.Append(c); 200 result.Append(c);
Line 201... Line 201...
201 continue; 201 continue;
202 } 202 }
Line 203... Line 203...
203   203  
204 // Normalize to lower. 204 // Normalize to lower.
205 char l = char.ToLower(c); 205 var l = char.ToLower(c);
206   206  
207 Action<char[]> rotate = o => 207 Action<char[]> rotate = o =>
208 { 208 {
209 int i = o.Length - 1; 209 var i = o.Length - 1;
210 do 210 do
Line 222... Line 222...
222   222  
223 // Forward pass through the Enigma's rotors. 223 // Forward pass through the Enigma's rotors.
Line 224... Line 224...
224 rotate.Invoke(rotors); 224 rotate.Invoke(rotors);
225   225  
226 // Reflect 226 // Reflect
Line 227... Line 227...
227 int x = Array.IndexOf(def_reflectors[reflector], l); 227 var x = Array.IndexOf(def_reflectors[reflector], l);
228 l = (x + 1)%2 == 0 ? def_reflectors[reflector][x - 1] : def_reflectors[reflector][x + 1]; 228 l = (x + 1)%2 == 0 ? def_reflectors[reflector][x - 1] : def_reflectors[reflector][x + 1];
Line 252... Line 252...
252 /// <param name="input">the input to expand to</param> 252 /// <param name="input">the input to expand to</param>
253 /// <param name="enc_key">the key to expand</param> 253 /// <param name="enc_key">the key to expand</param>
254 /// <returns>the expanded key</returns> 254 /// <returns>the expanded key</returns>
255 public static string VIGENEREExpandKey(string input, string enc_key) 255 public static string VIGENEREExpandKey(string input, string enc_key)
256 { 256 {
257 string exp_key = string.Empty; 257 var exp_key = string.Empty;
258 int i = 0, j = 0; 258 int i = 0, j = 0;
259 do 259 do
260 { 260 {
261 char p = input[i]; 261 var p = input[i];
262 if (!char.IsLetter(p)) 262 if (!char.IsLetter(p))
263 { 263 {
264 exp_key += p; 264 exp_key += p;
265 ++i; 265 ++i;
266 continue; 266 continue;
267 } 267 }
268 int m = j%enc_key.Length; 268 var m = j%enc_key.Length;
269 exp_key += enc_key[m]; 269 exp_key += enc_key[m];
270 ++j; 270 ++j;
271 ++i; 271 ++i;
272 } while (i < input.Length); 272 } while (i < input.Length);
273 return exp_key; 273 return exp_key;
Line 289... Line 289...
289 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 289 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
290 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' 290 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
291 }; 291 };
Line 292... Line 292...
292   292  
293 enc_key = VIGENEREExpandKey(input, enc_key); 293 enc_key = VIGENEREExpandKey(input, enc_key);
294 string result = string.Empty; 294 var result = string.Empty;
295 int i = 0; 295 var i = 0;
296 do 296 do
297 { 297 {
298 char p = input[i]; 298 var p = input[i];
299 if (!char.IsLetter(p)) 299 if (!char.IsLetter(p))
300 { 300 {
301 result += p; 301 result += p;
302 ++i; 302 ++i;
303 continue; 303 continue;
304 } 304 }
305 char q = 305 var q =
306 Arrays.ReversePermuteArrayElements(a, Array.IndexOf(a, enc_key[i]))[ 306 Arrays.ReversePermuteArrayElements(a, Array.IndexOf(a, enc_key[i]))[
307 Array.IndexOf(a, char.ToLowerInvariant(p))]; 307 Array.IndexOf(a, char.ToLowerInvariant(p))];
308 if (char.IsUpper(p)) 308 if (char.IsUpper(p))
309 { 309 {
Line 331... Line 331...
331 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 331 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
332 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' 332 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
333 }; 333 };
Line 334... Line 334...
334   334  
335 enc_key = VIGENEREExpandKey(input, enc_key); 335 enc_key = VIGENEREExpandKey(input, enc_key);
336 string result = string.Empty; 336 var result = string.Empty;
337 int i = 0; 337 var i = 0;
338 do 338 do
339 { 339 {
340 char p = input[i]; 340 var p = input[i];
341 if (!char.IsLetter(p)) 341 if (!char.IsLetter(p))
342 { 342 {
343 result += p; 343 result += p;
344 ++i; 344 ++i;
345 continue; 345 continue;
346 } 346 }
347 char q = 347 var q =
348 a[ 348 a[
349 Array.IndexOf(Arrays.ReversePermuteArrayElements(a, Array.IndexOf(a, enc_key[i])), 349 Array.IndexOf(Arrays.ReversePermuteArrayElements(a, Array.IndexOf(a, enc_key[i])),
350 char.ToLowerInvariant(p))]; 350 char.ToLowerInvariant(p))];
351 if (char.IsUpper(p)) 351 if (char.IsUpper(p))
Line 372... Line 372...
372 { 372 {
373 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 373 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
374 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' 374 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
375 }; 375 };
Line 376... Line 376...
376   376  
Line 377... Line 377...
377 char[] input = data.ToCharArray(); 377 var input = data.ToCharArray();
378   378  
379 Parallel.ForEach(Enumerable.Range(0, data.Length), i => 379 Parallel.ForEach(Enumerable.Range(0, data.Length), i =>
380 { 380 {
381 char e = input[i]; 381 var e = input[i];
382 if (!char.IsLetter(e)) return; 382 if (!char.IsLetter(e)) return;
383 int x = 25 - Array.BinarySearch(a, char.ToLowerInvariant(e)); 383 var x = 25 - Array.BinarySearch(a, char.ToLowerInvariant(e));
384 if (!char.IsUpper(e)) 384 if (!char.IsUpper(e))
385 { 385 {
386 input[i] = a[x]; 386 input[i] = a[x];