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); }
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; } }