private static RsaCrpyter GetServerKey(Settings settings, RequestSender sender) { string storeFile = settings.FINGERPRINT_STORE_FILE; var store = new FingerprintStore(storeFile); var hello = new HelloRequest(); var helloResponse = sender.SendAndRecieve <HelloResponse>(hello); if (helloResponse == null) { MessageBox.Show("Server neodpověděl na požadavek pro zaslání veřejného klíče. Zkontrolujte síťové připojení.", "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error); return(null); } var assymetricCrypter = new RsaCrpyter(helloResponse.CrypterConfig); if (!store.IsKnownFingerprint(assymetricCrypter.KeyFingerprint)) { string msg = string.Format("Server se představil veřejným klíčem\r\n{0}\r\nkterý zatím není v seznamu známých hostitelů. Pokud tomuto serveru důvěřujete, přejete si klíč do seznamu přidat?", store.PrintFingerprint(assymetricCrypter.KeyFingerprint)); var result = MessageBox.Show(msg, "Upozornění", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation); if (result == DialogResult.Yes) { store.AddFingerPrint(assymetricCrypter.KeyFingerprint); } else { return(null); } } return(assymetricCrypter); }
public static void Run() { var settings = Settings.Default; // Initialization db = InitDatabase(settings); if (db == null) { return; } authenticator = InitAuthenticator(settings); if (authenticator == null) { return; } authorizator = InitAuthorizator(settings); if (authorizator == null) { return; } playback = InitPlayback(settings); if (playback == null) { return; } store = InitFileStore(settings); if (store == null) { return; } scheduler = InitScheduler(settings, db, store, playback); if (scheduler == null) { return; } crypter = InitCrypter(settings); if (crypter == null) { return; } sessions = InitSessionManager(); if (sessions == null) { return; } server = InitTcpServer(settings); if (server == null) { return; } reciever = InitReciever(settings, server, crypter, authenticator, authorizator); if (reciever == null) { return; } ProgramOutput.Info("SERVER INITIALIZATION COMPLETED SUCCESSFULLY !!!\r\n"); // Start server scheduler.StartChecking(); ProgramOutput.Info("Scheduler started."); server.StartListening(); ProgramOutput.Info("Server is listening on TCP port {0}...", server.Port); }
public RequestReciever(TcpServer server, RsaCrpyter asymetricCrypter, IAuthenticator authenticator, IAuthorizator authorizator) { this.server = server; this.asymetricCrypter = asymetricCrypter; this.authenticator = authenticator; this.authorizator = authorizator; this.sessions = new SessionManager(); this.formatter = new NetFormatter(); server.ClientEstablishing += Server_ClientEstablishing; server.DataRecieved += Server_DataRecieved; }
private static RsaCrpyter InitCrypter(Settings settings) { RsaCrpyter crypter = null; string keyFile = settings.KEYS_FILE; if (File.Exists(keyFile)) { string xml = null; try { ProgramOutput.Info("Loading RSA key pair from file {0}...", keyFile); xml = File.ReadAllText(keyFile); } catch { ProgramOutput.Error("Error accessing RSA key file {0}. Please check permissions to this file.", keyFile); Console.ReadKey(true); return(null); } try { crypter = new RsaCrpyter(xml); } catch { ProgramOutput.Error("Error parsing RSA key file {0}. Maybe the file is corrupted or invalid format. Please delete the file to generate new RSA key pair.", keyFile); Console.ReadKey(true); return(null); } } else { ProgramOutput.Info("Generating new RSA key pair into file {0}...", keyFile); crypter = new RsaCrpyter(); string xml = crypter.GetFullXmlConfig(); try { File.WriteAllText(keyFile, xml); } catch { ProgramOutput.Error("Error accessing RSA key file {0}. Please check permissions to this file.", keyFile); Console.ReadKey(true); return(null); } } MasterContainer.AddService <RsaCrpyter>(crypter); ProgramOutput.Info("RSA crypto module successfuly initialized."); return(crypter); }
private static RequestReciever InitReciever(Settings settings, TcpServer server, RsaCrpyter crypter, IAuthenticator authenticator, IAuthorizator authorizator) { var reciever = new RequestReciever(server, crypter, authenticator, authorizator); reciever.NetProblem += LogIncident; reciever.UnrecognizedRequest += LogIncident; reciever.Unauthorized += LogIncident; reciever.AccessDenied += LogIncident; reciever.ExecuteError += LogIncident; reciever.InvalidResponse += LogIncident; return(reciever); }