using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace CryptanalysisCore
{
public static class Storage
{
public static string ConfPath;
public const string FrequencyFile = "frequency.xml";
public const string UniqueFile = "unique.txt";
public const string DictionaryFile = "dictionary.dic";
public const string TextsFile = "texts.txt";
public const string TextsFolder = "texts/";
public static string[] Letters
{ get; private set; }
public static string[] Vowels
{ get; private set; }
///
/// Seznam podporovaných jazyků
///
public enum Languages
{
czech,
english,
germany,
french
}
///
/// Seznam podporovaných šifer
///
public enum Ciphers
{
caesar,
monoalphabetic,
vigenere,
trans
}
///
/// Dvojice jazyk : charakteristiky daného jazyka
///
private static Dictionary langChars;
///
/// Uchovává seznamy crackovacích algoritmů pro jednotlivé šifry
///
public static Dictionary CrackAlgorithms
{
get;
private set;
}
static Storage()
{
//if (Environment.MachineName == "LUKASHAVRLANT")
ConfPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Cryptanalysis\\";
//else
// ConfPath = "items\\";
SetCiphers();
SetLanguages();
SetCrackAlgorithms();
SetLetters();
}
private static void SetLetters()
{
Letters = LettersToArray("abcdefghijklmnopqrstuvwxyz");
Vowels = LettersToArray("aeuioy");
}
private static string[] LettersToArray(string letters)
{
return letters.ToCharArray().Select(x => x.ToString()).ToArray();
}
///
/// Načte z disku požadovaná data
///
public static void LoadFiles(Action actionIfNotSucces)
{
try
{
langChars = new Dictionary();
var names = Enum.GetNames(typeof(Languages));
foreach (string name in names)
{
Languages l = (Languages)Enum.Parse(typeof(Languages), name);
langChars[l] = new LangCharacteristic(l);
}
}
catch (Exception)
{
actionIfNotSucces();
}
}
private static void SetCrackAlgorithms()
{
CrackAlgorithms = new Dictionary();
string[] caesarAlgs = new string[] { "Útok hrubou silou", "Trojúhelníkový útok" };
string[] monoalphabeticAlgs = new string[] { "Frekvenční analýza" };
string[] vigenereAlgs = { "Útok hrubou silou", };
string[] transAlgs = { "Útok odhadnutím délky klíče" };
CrackAlgorithms[Ciphers.caesar] = caesarAlgs;
CrackAlgorithms[Ciphers.monoalphabetic] = monoalphabeticAlgs;
CrackAlgorithms[Ciphers.vigenere] = vigenereAlgs;
CrackAlgorithms[Ciphers.trans] = transAlgs;
}
///
/// Naplnění tabulky šifrových jmen
///
private static void SetCiphers()
{
CiphersID = new Dictionary();
CiphersID["Caesarova šifra"] = Ciphers.caesar;
CiphersID["Monoalfabetická šifra"] = Ciphers.monoalphabetic;
CiphersID["Vigenérova šifra"] = Ciphers.vigenere;
CiphersID["Transpoziční šifra"] = Ciphers.trans;
}
///
/// Naplnění tabulky jazyků
///
private static void SetLanguages()
{
LanguagesID = new Dictionary();
LanguagesID["čeština"] = Languages.czech;
LanguagesID["angličtina"] = Languages.english;
LanguagesID["němčina"] = Languages.germany;
LanguagesID["francouzština"] = Languages.french;
}
///
/// Vrátí charakteristicky jazyka (tohle je ale blbost, to se přepíše)
///
///
///
public static LangCharacteristic GetLangChar(Languages language)
{
return langChars[language];
}
///
/// Slovník název šifry : enum ty šifry
///
public static Dictionary CiphersID;
///
/// Vrátí seznam všech podporovaných šifer
///
public static string[] CiphersNames
{
get
{
return CiphersID.Keys.ToArray();
}
}
///
/// Slovník název jazyka : enum jazyka
///
public static Dictionary LanguagesID;
///
/// Obsahuje seznam všech podporovaných jazyků
///
public static string[] LanguagesNames
{
get
{
return LanguagesID.Keys.ToArray();
}
}
}
}