Beispiel #1
0
        public bool GenerateKey(RSAParameters publicKey, out RSAKeyExchange Exchange)
        {
            Exchange = null;

            if (lastGeneratedKey >= Keys.Length)
            {
                return(false);
            }

            Keys[lastGeneratedKey] = Encoding.UTF8.GetString(Security.GenerateSecureKey(32));
            Exchange = EncryptKey(Keys[lastGeneratedKey], publicKey);

            lastGeneratedKey++;
            return(true);
        }
Beispiel #2
0
        public void AcceptPacket()
        {
            byte[] packetBuffer = new byte[serverSocket.Available];
            serverSocket.Receive(packetBuffer);

            if (encryption.isSecured)
            {
                packetBuffer = encryption.DecryptPacket(packetBuffer);
            }

            Packet packet = null;

            try
            {
                packet = Packet.Deserialize(packetBuffer);
            }
            catch (Exception e)
            {
                Log.Error("Error Deserializing packet");
                Log.Error(e.Message);
                return;
            }

            switch (packet.Type)
            {
            case 2:
                RSAKeyExchange keyExchange = null;
                if (encryption.GenerateKey((packet as RSAPublic).RSAPublicKey, out keyExchange))
                {
                    keyExchange.Send(serverSocket);
                    new RSARequest(encryption.Keys.Length).Send(serverSocket);
                }
                break;

            case 4:
                if (encryption.Verified(packet as SymmetricKeyVerification))
                {
                    encryption.isSecured = true;
                    byte[] verificationData = Security.GenerateSecureKey(25);
                }
                else
                {
                    Drop();
                }
                break;
            }
        }