public void CanSignAndValidateData()
        {
            var rsa = new RsaManager();
            byte[] signature = rsa.SignData(_data);

            Assert.IsTrue(rsa.VerifyData(_data, signature));
        }
        static void Main(string[] args)
        {
            IPEndPoint       point         = new IPEndPoint(IPAddress.Parse(ip), port);
            Socket           serverSocket  = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            TlsServerManager serverManager = new TlsServerManager();
            RsaManager       rsaManager    = new RsaManager();

            serverSocket.Bind(point);
            try
            {
                Console.WriteLine("Server is listeting");
                serverSocket.Listen(1);

                using (var socketHandler = serverSocket.Accept())
                {
                    Console.WriteLine("Connected!");
                    byte[]        buffer  = new byte[256];
                    StringBuilder builder = new StringBuilder();

                    string serverHello = serverManager.GetConnectMessage();
                    buffer = Encoding.Unicode.GetBytes(serverHello);
                    socketHandler.Send(buffer);

                    do
                    {
                        int bytes = socketHandler.Receive(buffer);
                        builder.Append(Encoding.Unicode.GetString(buffer, 0, bytes));
                    } while (socketHandler.Available > 0);

                    string clientHello = builder.ToString();
                    serverManager.SetClientPublicKey(serverManager.ParseConnectAnswer(clientHello));

                    string message;
                    bool   isSuccess;
                    while (true)
                    {
                        Console.Write($"{DateTime.Now} You: ");
                        message = Console.ReadLine();
                        socketHandler.Send(SerializateMessage(message, serverManager, rsaManager));

                        while (socketHandler.Available == 0)
                        {
                            Thread.Sleep(100);
                        }

                        buffer = new byte[socketHandler.Available];
                        socketHandler.Receive(buffer);
                        string answer = DeserializateMessage(buffer, serverManager, rsaManager, out isSuccess);
                        if (isSuccess)
                        {
                            Console.WriteLine($"{DateTime.Now} Client: {answer}");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Beispiel #3
0
        public void CanSignAndValidateData()
        {
            var rsa = new RsaManager();

            byte[] signature = rsa.SignData(_data);

            Assert.IsTrue(rsa.VerifyData(_data, signature));
        }
Beispiel #4
0
        public void RsaManager_EqualStrings_ReturnTrue()
        {
            string message = RandomString((new Random()).Next(10, 100));

            RsaManager rsaManager1    = new RsaManager();
            RsaManager rsaManager2    = new RsaManager();
            var        encryptMessage = rsaManager1.EncryptMessage(message, false, rsaManager2.PublicKey);
            var        result         = rsaManager2.DecryptMessage(encryptMessage, false);

            Assert.AreEqual(message, result);
        }
Beispiel #5
0
        public static void RsaManagerTests()
        {
            string data = "HelloWorld!!!";

            Console.WriteLine("█ BER");
            RsaKeyPair keyPair = RsaManager.CreateKeyPair(4096, RsaKeyEncoding.Ber);

            Console.WriteLine("Public:\n" + keyPair.PublicKey);
            Console.WriteLine("Private:\n" + keyPair.PrivateKey);
            string encrypted = RsaManager.EncryptToBase64(data, keyPair.PublicKey);

            Console.WriteLine("Encrypted: " + encrypted);
            Console.WriteLine("Decrypted: " + RsaManager.DecryptFromBase64(encrypted, keyPair.PrivateKey));

            Console.WriteLine("█ XML");
            keyPair = RsaManager.CreateKeyPair(4096, RsaKeyEncoding.Xml, false);
            Console.WriteLine("Public:\n" + keyPair.PublicKey);
            Console.WriteLine("Private:\n" + keyPair.PrivateKey);
            encrypted = RsaManager.EncryptToBase64(data, keyPair.PublicKey);
            Console.WriteLine("Encrypted: " + encrypted);
            Console.WriteLine("Decrypted: " + RsaManager.DecryptFromBase64(encrypted, keyPair.PrivateKey));

            Console.WriteLine("█ XML INDENTED");
            keyPair = RsaManager.CreateKeyPair(4096, RsaKeyEncoding.Xml);
            Console.WriteLine("Public:\n" + keyPair.PublicKey);
            Console.WriteLine("Private:\n" + keyPair.PrivateKey);
            encrypted = RsaManager.EncryptToBase64(data, keyPair.PublicKey);
            Console.WriteLine("Encrypted: " + encrypted);
            Console.WriteLine("Decrypted: " + RsaManager.DecryptFromBase64(encrypted, keyPair.PrivateKey));

            Console.WriteLine("█ JSON");
            keyPair = RsaManager.CreateKeyPair(4096, RsaKeyEncoding.Json, false);
            Console.WriteLine("Public:\n" + keyPair.PublicKey);
            Console.WriteLine("Private:\n" + keyPair.PrivateKey);
            encrypted = RsaManager.EncryptToBase64(data, keyPair.PublicKey);
            Console.WriteLine("Encrypted: " + encrypted);
            Console.WriteLine("Decrypted: " + RsaManager.DecryptFromBase64(encrypted, keyPair.PrivateKey));

            Console.WriteLine("█ JSON INDENTED");
            keyPair = RsaManager.CreateKeyPair(512, RsaKeyEncoding.Json);
            Console.WriteLine("Public:\n" + keyPair.PublicKey);
            Console.WriteLine("Private:\n" + keyPair.PrivateKey);
            encrypted = RsaManager.EncryptToBase64(data, keyPair.PublicKey);
            Console.WriteLine("Encrypted: " + encrypted);
            Console.WriteLine("Decrypted: " + RsaManager.DecryptFromBase64(encrypted, keyPair.PrivateKey));

            Console.WriteLine("█ PEM");
            keyPair = RsaManager.CreateKeyPair(4096, RsaKeyEncoding.Pem);
            Console.WriteLine("Public:\n" + keyPair.PublicKey);
            Console.WriteLine("Private:\n" + keyPair.PrivateKey);
            encrypted = RsaManager.EncryptToBase64(data, keyPair.PublicKey);
            Console.WriteLine("Encrypted: " + encrypted);
            Console.WriteLine("Decrypted: " + RsaManager.DecryptFromBase64(encrypted, keyPair.PrivateKey));
        }
Beispiel #6
0
        /// <summary>
        ///     Returns a value indicating whether the package is valid or not. If it contains an invalid signature, it will be deleted directly.
        /// </summary>
        /// <returns>Returns 'true' if the package is valid, otherwise 'false'.</returns>
        /// <exception cref="FileNotFoundException">The update package to check could not be found.</exception>
        /// <exception cref="ArgumentException">The signature of the update package is null or empty.</exception>
        public bool CheckPackageValidity()
        {
            if (!File.Exists(_updateFilePath))
            {
                throw new FileNotFoundException(_lp.PackageFileNotFoundExceptionText);
            }

            if (Signature == null || Signature.Length <= 0)
            {
                throw new ArgumentException("Signature");
            }

            byte[] data;
            using (var reader =
                       new BinaryReader(File.Open(_updateFilePath,
                                                  FileMode.Open)))
            {
                data = reader.ReadBytes((int)reader.BaseStream.Length);
            }

            RsaManager rsa;

            try
            {
                rsa = new RsaManager(PublicKey);
            }
            catch
            {
                try
                {
                    DeletePackage();
                }
                catch (Exception ex)
                {
                    throw new PackageDeleteException(ex.Message);
                }
                return(false);
            }

            if (rsa.VerifyData(data, Signature))
            {
                return(true);
            }

            try
            {
                DeletePackage();
            }
            catch (Exception ex)
            {
                throw new PackageDeleteException(ex.Message);
            }
            return(false);
        }
Beispiel #7
0
        public void RsaManager_EqualHash_ReturnTrue()
        {
            string message = RandomString((new Random()).Next(10, 1000));

            SHA1Managed managed = new SHA1Managed();

            var        hashSum          = managed.ComputeHash(Encoding.Unicode.GetBytes(message));
            RsaManager manager1         = new RsaManager();
            RsaManager manager2         = new RsaManager();
            var        digitalSignature = manager1.GetDigitalSignature(hashSum);

            Assert.IsTrue(manager2.IsValidDigitalSignature(hashSum, digitalSignature, manager1.PublicKey));
        }
        public void CanSignAndValidateDataWithSaving()
        {
            var rsa = new RsaManager();
            byte[] signature = rsa.SignData(_data);

            File.WriteAllBytes(_signatureFile, signature);
            File.WriteAllText(_keyFile, rsa.PublicKey);

            var givenRsa = new RsaManager(File.ReadAllText(_keyFile));
            byte[] givenSignature = File.ReadAllBytes(_signatureFile);

            Assert.IsTrue(givenRsa.VerifyData(_data, givenSignature));
        }
        static void Main(string[] args)
        {
            IPEndPoint       point         = new IPEndPoint(IPAddress.Parse(ip), port);
            Socket           clientSocket  = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            TlsClientManager clientManager = new TlsClientManager();
            RsaManager       rsaManager    = new RsaManager();

            try
            {
                clientSocket.Connect(point);

                StringBuilder builder = new StringBuilder();
                byte[]        buffer  = new byte[256];

                do
                {
                    int bytes = clientSocket.Receive(buffer);
                    builder.Append(Encoding.Unicode.GetString(buffer, 0, bytes));
                } while (clientSocket.Available > 0);
                clientManager.ParseSetConnectMessage(builder.ToString());
                builder.Clear();

                clientSocket.Send(Encoding.Unicode.GetBytes(clientManager.GetConnectAnswer()));

                while (true)
                {
                    while (clientSocket.Available == 0)
                    {
                        Thread.Sleep(100);
                    }

                    buffer = new byte[clientSocket.Available];
                    clientSocket.Receive(buffer);
                    bool   isSuccess;
                    string message = DeserializateMessage(buffer, clientManager, rsaManager, out isSuccess);
                    if (isSuccess)
                    {
                        Console.WriteLine($"{DateTime.Now} Server: {message}");
                    }

                    Console.Write($"{DateTime.Now} You: ");
                    string answer = Console.ReadLine();
                    clientSocket.Send(SerializateMessage(answer, clientManager, rsaManager));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                Console.ReadKey();
            }
        }
Beispiel #10
0
        public void CanSignAndValidateDataWithSaving()
        {
            var rsa = new RsaManager();

            byte[] signature = rsa.SignData(_data);

            File.WriteAllBytes(_signatureFile, signature);
            File.WriteAllText(_keyFile, rsa.PublicKey);

            var givenRsa = new RsaManager(File.ReadAllText(_keyFile));

            byte[] givenSignature = File.ReadAllBytes(_signatureFile);

            Assert.IsTrue(givenRsa.VerifyData(_data, givenSignature));
        }
Beispiel #11
0
        /// <summary>
        ///     Provides a new thread that generates a new RSA-key pair.
        /// </summary>
        private void GenerateKeyPair()
        {
            var rsa = new RsaManager();

            PrivateKey = rsa.PrivateKey;
            PublicKey  = rsa.PublicKey;

            Invoke(new Action(() =>
            {
                controlPanel1.Visible = true;
                informationCategoriesTabControl.SelectedTab = generalTabPage;
                _sender = generalTabPage;
            }));

            _allowCancel = true;
        }
Beispiel #12
0
        public void TestSerialization()
        {
            string           message        = RandomString((new Random()).Next(10, 1000));
            TlsServerManager serverManager  = new TlsServerManager();
            string           connectMessage = serverManager.GetConnectMessage();
            TlsClientManager clientManager  = new TlsClientManager();

            clientManager.ParseSetConnectMessage(connectMessage);
            var answer = serverManager.ParseConnectAnswer(clientManager.GetConnectAnswer());

            clientManager.ClearData();
            serverManager.SetClientPublicKey(answer);
            RsaManager rsaManager = new RsaManager();

            byte[] resultSerialize = Server.Program.SerializateMessage(message, serverManager, rsaManager);
            bool   isSuccess;
            string resultString = Server.Program.DeserializateMessage(resultSerialize, serverManager, rsaManager, out isSuccess);

            Assert.AreEqual(message, resultString);
        }
Beispiel #13
0
        private async void GenerateKeyPair()
        {
            await Task.Factory.StartNew(() =>
            {
                var rsa = new RsaManager();
                PrivateKey = rsa.PrivateKey;
                PublicKey = rsa.PublicKey;

                Invoke(new Action(() =>
                {
                    controlPanel1.Visible = true;
                    informationCategoriesTabControl.SelectedTab = generalTabPage;
                    _sender = generalTabPage;
                }));

                _allowCancel = true;
            });
        }
 public void GeneratePublicPrivateKey()
 {
     rsa = new RsaManager();
 }
Beispiel #15
0
        /// <summary>
        ///     Returns a value indicating whether the signature of each package is valid, or not. If a package contains an invalid
        ///     signature, it will be deleted directly.
        /// </summary>
        /// <returns>Returns <c>true</c> if the package is valid; otherwise <c>false</c>.</returns>
        /// <exception cref="FileNotFoundException">The update package to check could not be found.</exception>
        /// <exception cref="ArgumentException">The signature of the update package is null or empty.</exception>
        public bool ValidatePackages()
        {
            foreach (var filePathItem in _packageFilePaths)
            {
                if (!File.Exists(filePathItem.Value))
                {
                    throw new FileNotFoundException(String.Format(_lp.PackageFileNotFoundExceptionText,
                                                                  filePathItem.Key.FullText));
                }

                var configuration =
                    _updateConfigurations.First(config => config.LiteralVersion == filePathItem.Key.ToString());
                if (configuration.Signature == null || configuration.Signature.Length <= 0)
                {
                    throw new ArgumentException(String.Format("Signature of version \"{0}\" is null or empty.",
                                                              configuration));
                }

                var stream = FileExtensions.WaitForFile(filePathItem.Value, FileMode.Open, FileAccess.Read,
                                                        FileShare.None);
                try
                {
                    RsaManager rsa;

                    try
                    {
                        rsa = new RsaManager(_publicKey);
                    }
                    catch
                    {
                        try
                        {
                            DeletePackages();
                            _packageFilePaths.Clear();
                            _packageOperations.Clear();
                        }
                        catch (Exception ex)
                        {
                            throw new PackageDeleteException(ex.Message);
                        }
                        return(false);
                    }

                    if (rsa.VerifyData(stream, Convert.FromBase64String(configuration.Signature)))
                    {
                        continue;
                    }

                    try
                    {
                        DeletePackages();
                    }
                    catch (Exception ex)
                    {
                        throw new PackageDeleteException(ex.Message);
                    }

                    _packageFilePaths.Clear();
                    _packageOperations.Clear();
                    return(false);
                }
                finally
                {
                    stream.Close();
                }
            }
            return(true);
        }
Beispiel #16
0
        /// <summary>
        ///     Returns a value indicating whether the signature of each package is valid, or not. If a package contains an invalid
        ///     signature, it will be deleted directly.
        /// </summary>
        /// <returns>Returns <c>true</c> if the package is valid; otherwise <c>false</c>.</returns>
        /// <exception cref="FileNotFoundException">The update package to check could not be found.</exception>
        /// <exception cref="ArgumentException">The signature of the update package is null or empty.</exception>
        public bool ValidatePackages()
        {
            foreach (var filePathItem in _packageFilePaths)
            {
                if (!File.Exists(filePathItem.Value))
                    throw new FileNotFoundException(String.Format(_lp.PackageFileNotFoundExceptionText,
                        filePathItem.Key.FullText));

                var configuration =
                    _updateConfigurations.First(config => config.LiteralVersion == filePathItem.Key.ToString());
                if (configuration.Signature == null || configuration.Signature.Length <= 0)
                    throw new ArgumentException(String.Format("Signature of version \"{0}\" is null or empty.",
                        configuration));

                FileStream stream = File.Open(filePathItem.Value, FileMode.Open);
                try
                {
                    RsaManager rsa;

                    try
                    {
                        rsa = new RsaManager(_publicKey);
                    }
                    catch
                    {
                        try
                        {
                            DeletePackages();
                            _packageFilePaths.Clear();
                            _packageOperations.Clear();
                        }
                        catch (Exception ex)
                        {
                            throw new PackageDeleteException(ex.Message);
                        }
                        return false;
                    }

                    if (rsa.VerifyData(stream, Convert.FromBase64String(configuration.Signature)))
                        continue;

                    try
                    {
                        DeletePackages();
                    }
                    catch (Exception ex)
                    {
                        throw new PackageDeleteException(ex.Message);
                    }

                    _packageFilePaths.Clear();
                    _packageOperations.Clear();
                    return false;
                }
                finally
                {
                    stream.Close();
                }
            }
            return true;
        }
Beispiel #17
0
        public static string DeserializateMessage(byte[] message, TlsManager tlsManager, RsaManager rsaManager, out bool isAllSuccess)
        {
            isAllSuccess = false;
            byte[] IV = new byte[16],
            hashSum,
            digitalSignature = new byte[256],
            messageBytes;

            for (int i = 0; i < IV.Length; i++)
            {
                IV[i] = message[i];
            }

            hashSum = new byte[message[16]];

            for (int i = IV.Length + 1, j = 0; j < hashSum.Length; i++, j++)
            {
                hashSum[j] = message[i];
            }

            for (int i = IV.Length + 1 + hashSum.Length, j = 0; j < digitalSignature.Length; i++, j++)
            {
                digitalSignature[j] = message[i];
            }

            messageBytes = new byte[message.Length - IV.Length - 1 - hashSum.Length - digitalSignature.Length];

            for (int i = IV.Length + 1 + hashSum.Length + digitalSignature.Length, j = 0;
                 j < messageBytes.Length;
                 i++, j++)
            {
                messageBytes[j] = message[i];
            }

            bool   isSuccess;
            string decryptMessage  = tlsManager.DecryptMessage(messageBytes, IV, hashSum, out isSuccess);
            string rsaNotParsedKey = decryptMessage.Substring(decryptMessage.IndexOf("|rsaKeyStart|"),
                                                              decryptMessage.LastIndexOf("|rsaKeyEnd|") + "|rsaKeyEnd|".Length);
            string rsaKey = rsaNotParsedKey.Replace("|rsaKeyStart|", "");

            rsaKey = rsaKey.Replace("|rsaKeyEnd|", "");
            bool isValidDigitalSignature = rsaManager.IsValidDigitalSignature(hashSum, digitalSignature, rsaKey);

            decryptMessage = decryptMessage.Replace(rsaNotParsedKey, "");

            if ((isSuccess == true) & (isValidDigitalSignature == true))
            {
                isAllSuccess = true;
            }

            return(decryptMessage);
        }
Beispiel #18
0
        public static byte[] SerializateMessage(string message, TlsManager tlsManager, RsaManager rsaManager)
        {
            byte[] IV,
            hashSum,
            digitalSignature,
            hashSumCount,
            messageBytes;
            string publicRSAKey = rsaManager.PublicKey;

            message = $"|rsaKeyStart|{publicRSAKey}|rsaKeyEnd|{message}";

            messageBytes     = tlsManager.EncryptMessage(message, out IV, out hashSum);
            hashSumCount     = new byte[] { (byte)hashSum.Length };
            digitalSignature = rsaManager.GetDigitalSignature(hashSum);

            return(IV.Concat(hashSumCount.Concat(hashSum.Concat(digitalSignature.Concat(messageBytes)))).ToArray());
        }
 public MasterCommunicator()
 {
     rsa  = new RsaManager();
     tdes = new TdesManager();
 }