From 74af5ae69159ea13d87b33f0ed41d9a212d10e75 Mon Sep 17 00:00:00 2001 From: Alexander Eckart Date: Fri, 10 May 2013 12:01:20 +0200 Subject: [PATCH] made encryption optional, put server params into config, default is server = off --- .../ClientServerLib/CConnection.cs | 89 ++++++++++++++---- ClientServerLib/ClientServerLib/CServer.cs | 6 +- Output/ClientServerLib.dll | Bin 40960 -> 41472 bytes Vocaluxe/Base/CConfig.cs | 52 +++++++--- Vocaluxe/Base/Server/CVocaluxeServer.cs | 4 +- 5 files changed, 118 insertions(+), 33 deletions(-) diff --git a/ClientServerLib/ClientServerLib/CConnection.cs b/ClientServerLib/ClientServerLib/CConnection.cs index 628381cb..c217bd4b 100644 --- a/ClientServerLib/ClientServerLib/CConnection.cs +++ b/ClientServerLib/ClientServerLib/CConnection.cs @@ -13,6 +13,7 @@ namespace ClientServerLib internal class CConnection { private bool keySet; + private bool encryption; private CDiffieHellman dh; private UTF8Encoding encoder; private int connectionID; @@ -29,17 +30,23 @@ namespace ClientServerLib get { return connectionID; } } - public CConnection(TcpClient client, int ConnectionID) + public CConnection(TcpClient client, int ConnectionID, bool Encryption = false) { TcpClient = client; client.NoDelay = true; keySet = false; + encryption = Encryption; connectionID = ConnectionID; encoder = new UTF8Encoding(); } public byte[] GetKeyParams() { + if (!encryption) + { + return encoder.GetBytes("NO ENCRYPTION"); + } + if (dh == null) dh = new CDiffieHellman(256).GenerateRequest(); @@ -51,34 +58,65 @@ namespace ClientServerLib if (serverParam == null) return null; - dh = new CDiffieHellman(256).GenerateResponse( - encoder.GetString(serverParam, 0, serverParam.Length)); + string response = encoder.GetString(serverParam, 0, serverParam.Length); + if (response == "NO ENCRYPTION") + { + encryption = false; + keySet = true; + return encoder.GetBytes(response); + } + + dh = new CDiffieHellman(256).GenerateResponse(response); keySet = true; + encryption = true; return encoder.GetBytes(dh.ToString()); } public void CreateServerKey(byte[] clientResponse) { + string response = encoder.GetString(clientResponse, 0, clientResponse.Length); + + if (response == "NO ENCRYPTION") + { + keySet = true; + return; + } + if (dh == null) return; - dh.HandleResponse(encoder.GetString(clientResponse, 0, clientResponse.Length)); + dh.HandleResponse(response); keySet = true; } public byte[] Encrypt(byte[] Data) { - if (Data == null || !keySet) + if (Data == null || (!keySet && encryption)) return Data; + byte[] dataLength = BitConverter.GetBytes(Data.Length); + + if (!encryption) + { + int len = 4 + dataLength.Length + Data.Length; + byte[] messageLength = BitConverter.GetBytes(len); + + using (var stream = new MemoryStream()) + { + stream.Write(messageLength, 0, messageLength.Length); + stream.Write(dataLength, 0, dataLength.Length); + stream.Write(Data, 0, Data.Length); + + return stream.ToArray(); + } + } + using (Aes aes = new AesManaged()) { aes.Key = dh.Key; aes.GenerateIV(); - byte[] dataLength = BitConverter.GetBytes(Data.Length); - using (var encryptor = aes.CreateEncryptor(aes.Key, aes.IV)) using (var memoryStream = new MemoryStream()) using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) @@ -91,32 +129,47 @@ namespace ClientServerLib int len = 4 + aes.IV.Length + dataLength.Length + encrypted.Length; byte[] messageLength = BitConverter.GetBytes(len); - MemoryStream stream = new MemoryStream(); - stream.Write(messageLength, 0, messageLength.Length); - stream.Write(aes.IV, 0, aes.IV.Length); - stream.Write(dataLength, 0, dataLength.Length); - stream.Write(encrypted, 0, encrypted.Length); + using (var stream = new MemoryStream()) + { + stream.Write(messageLength, 0, messageLength.Length); + stream.Write(aes.IV, 0, aes.IV.Length); + stream.Write(dataLength, 0, dataLength.Length); + stream.Write(encrypted, 0, encrypted.Length); - return stream.ToArray(); + return stream.ToArray(); + } } } } public byte[] Decrypt(byte[] Data) { - if (Data == null || !keySet) + if (Data == null || (!keySet && encryption)) return Data; - if (Data.Length < 25) - return null; - + int messageLength = BitConverter.ToInt32(Data, 0); if (messageLength > Data.Length) return null; + int dataLength; + + if (!encryption) + { + dataLength = BitConverter.ToInt32(Data, 4); + + byte[] message = new byte[dataLength]; + Array.Copy(Data, 8, message, 0, dataLength); + return message; + } + + if (Data.Length < 25) + return null; + byte[] IV = new byte[16]; Array.Copy(Data, 4, IV, 0, 16); - int dataLength = BitConverter.ToInt32(Data, 20); + + dataLength = BitConverter.ToInt32(Data, 20); using (Aes aes = new AesManaged()) { diff --git a/ClientServerLib/ClientServerLib/CServer.cs b/ClientServerLib/ClientServerLib/CServer.cs index a02b1f41..b91ba110 100644 --- a/ClientServerLib/ClientServerLib/CServer.cs +++ b/ClientServerLib/ClientServerLib/CServer.cs @@ -13,6 +13,7 @@ namespace ClientServerLib private TcpListener tcpListener; private Thread listenThread; private int port; + private bool encryption; private int bufferLength = 8192; private bool running; @@ -21,11 +22,12 @@ namespace ClientServerLib private Dictionary clients; private Queue ids; - public CServer(HandleRequest RequestCallback, int Port = 3000) + public CServer(HandleRequest RequestCallback, int Port = 3000, bool Encryption = false) { port = Port; running = false; requestCallback = RequestCallback; + encryption = Encryption; clients = new Dictionary(); ids = new Queue(1000); @@ -90,7 +92,7 @@ namespace ClientServerLib if (client != null) { int id = ids.Dequeue(); - CConnection connection = new CConnection(client, id); + CConnection connection = new CConnection(client, id, encryption); lock (clients) { diff --git a/Output/ClientServerLib.dll b/Output/ClientServerLib.dll index 6931132f5b8400fa0372ce81c076a7c3da7e4ed8..f59ca7e80a13724573c26de71561250c67742c92 100644 GIT binary patch delta 7694 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 WWbM(8q5I!AL|un>|EFSat@VE`PLN>$ delta 7051 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 diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 7b6e35e2..ae7c18af 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -115,7 +115,8 @@ namespace Vocaluxe.Base public static SWebcamConfig WebcamConfig; // Server - public static EOffOn Server = EOffOn.TR_CONFIG_ON; + public static EOffOn ServerActive = EOffOn.TR_CONFIG_OFF; + public static EOffOn ServerEncryption = EOffOn.TR_CONFIG_OFF; public static int ServerPort = 3000; public static string ServerPassword = "vocaluxe"; @@ -280,6 +281,16 @@ namespace Vocaluxe.Base xmlReader.TryGetIntValueRange("//root/Record/MicDelay", ref MicDelay, 0, 500); MicDelay = (int)(20 * Math.Round(MicDelay / 20.0)); #endregion Record + + #region Server + xmlReader.TryGetEnumValue("//root/Server/ServerActive", ref ServerActive); + xmlReader.TryGetEnumValue("//root/Server/ServerEncryption", ref ServerEncryption); + xmlReader.TryGetIntValue("//root/Server/ServerPort", ref ServerPort); + if (ServerPort < 1 || ServerPort > 65535) + ServerPort = 3000; + + xmlReader.GetValue("//root/Server/ServerPassword", out ServerPassword, ServerPassword); + #endregion Server } public static bool SaveConfig() @@ -362,25 +373,25 @@ namespace Vocaluxe.Base writer.WriteComment("Name of cover-theme"); writer.WriteElementString("Cover", CoverTheme); - writer.WriteComment("Draw note-lines:" + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteComment("Draw note-lines: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); writer.WriteElementString("DrawNoteLines", Enum.GetName(typeof(EOffOn), DrawNoteLines)); - writer.WriteComment("Draw tone-helper:" + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteComment("Draw tone-helper: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); writer.WriteElementString("DrawToneHelper", Enum.GetName(typeof(EOffOn), DrawToneHelper)); - writer.WriteComment("Look of timer:" + CHelper.ListStrings(Enum.GetNames(typeof(ETimerLook)))); + writer.WriteComment("Look of timer: " + CHelper.ListStrings(Enum.GetNames(typeof(ETimerLook)))); writer.WriteElementString("TimerLook", Enum.GetName(typeof(ETimerLook), TimerLook)); - writer.WriteComment("Information about players on SingScreen:" + CHelper.ListStrings(Enum.GetNames(typeof(EPlayerInfo)))); + writer.WriteComment("Information about players on SingScreen: " + CHelper.ListStrings(Enum.GetNames(typeof(EPlayerInfo)))); writer.WriteElementString("PlayerInfo", Enum.GetName(typeof(EPlayerInfo), PlayerInfo)); - writer.WriteComment("Fade player-information with lyrics and notebars:" + CHelper.ListStrings(Enum.GetNames(typeof(EFadePlayerInfo)))); + writer.WriteComment("Fade player-information with lyrics and notebars: " + CHelper.ListStrings(Enum.GetNames(typeof(EFadePlayerInfo)))); writer.WriteElementString("FadePlayerInfo", Enum.GetName(typeof(EFadePlayerInfo), FadePlayerInfo)); - writer.WriteComment("Cover Loading:" + CHelper.ListStrings(Enum.GetNames(typeof(ECoverLoading)))); + writer.WriteComment("Cover Loading: " + CHelper.ListStrings(Enum.GetNames(typeof(ECoverLoading)))); writer.WriteElementString("CoverLoading", Enum.GetName(typeof(ECoverLoading), CoverLoading)); - writer.WriteComment("Lyric Style:" + CHelper.ListStrings(Enum.GetNames(typeof(ELyricStyle)))); + writer.WriteComment("Lyric Style: " + CHelper.ListStrings(Enum.GetNames(typeof(ELyricStyle)))); writer.WriteElementString("LyricStyle", Enum.GetName(typeof(ELyricStyle), LyricStyle)); writer.WriteEndElement(); @@ -401,15 +412,16 @@ namespace Vocaluxe.Base writer.WriteComment("AudioLatency from -500 to 500 ms"); writer.WriteElementString("AudioLatency", AudioLatency.ToString()); - writer.WriteComment("Background Music"); + writer.WriteComment("Background Music: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); writer.WriteElementString("BackgroundMusic", Enum.GetName(typeof(EOffOn), BackgroundMusic)); writer.WriteComment("Background Music Volume from 0 to 100"); writer.WriteElementString("BackgroundMusicVolume", BackgroundMusicVolume.ToString()); - writer.WriteComment("Background Music Source"); + writer.WriteComment("Background Music Source: " + CHelper.ListStrings(Enum.GetNames(typeof(EBackgroundMusicSource)))); writer.WriteElementString("BackgroundMusicSource", Enum.GetName(typeof(EBackgroundMusicSource), BackgroundMusicSource)); - writer.WriteComment("Background Music use start-tag of songs"); + + writer.WriteComment("Background Music use start-tag of songs: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); writer.WriteElementString("BackgroundMusicUseStart", Enum.GetName(typeof(EOffOn), BackgroundMusicUseStart)); writer.WriteComment("Preview Volume from 0 to 100"); @@ -539,6 +551,24 @@ namespace Vocaluxe.Base writer.WriteEndElement(); #endregion Record + #region Server + writer.WriteStartElement("Server"); + + writer.WriteComment("Server On/Off: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("ServerActive", Enum.GetName(typeof(EOffOn), ServerActive)); + + writer.WriteComment("Server Encryption On/Off: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("ServerEncryption", Enum.GetName(typeof(EOffOn), ServerEncryption)); + + writer.WriteComment("Server Port (default: 3000) [1..65535]"); + writer.WriteElementString("ServerPort", ServerPort.ToString()); + + writer.WriteComment("Server Password (default: vocaluxe)"); + writer.WriteElementString("ServerPassword", ServerPassword); + + writer.WriteEndElement(); + #endregion Server + // End of File writer.WriteEndElement(); //end of root writer.WriteEndDocument(); diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 020ba745..f82f81b5 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -26,13 +26,13 @@ namespace Vocaluxe.Base.Server public static void Init() { _Clients = new Dictionary(); - _Server = new CServer(RequestHandler, CConfig.ServerPort); + _Server = new CServer(RequestHandler, CConfig.ServerPort, CConfig.ServerEncryption == EOffOn.TR_CONFIG_ON); Controller.Init(); } public static void Start() { - if (CConfig.Server == EOffOn.TR_CONFIG_ON) + if (CConfig.ServerActive == EOffOn.TR_CONFIG_ON) _Server.Start(); }