# SCAR Chat Application A cross-platform GUI chat client and server with SSL/TLS encryption, built in C++. ## Features ### Server (`chat_server`) - Listens on TCP port **42317** with TLS/SSL encryption - Multi-client support with broadcast messaging - Uses OpenSSL for secure communication - Linux/cross-platform compatible ### Qt Client (`chat_client_qt`) - Cross-platform GUI using Qt5/6 Widgets - TLS/SSL encrypted connection to server - **Customizable UI:** - Background color selector for all windows - Chat text color customization - Transparency/opacity slider (0-100%) - Message history display - Real-time message sending and receiving - Linux/cross-platform compatible ### Windows Client (`chat_client_win`) - Native Win32 GUI client - Same UI features as Qt client - Windows-only build ## Prerequisites ### Linux / macOS ```bash # Ubuntu/Debian sudo apt-get install cmake qtbase5-dev libssl-dev build-essential # macOS (Homebrew) brew install cmake qt5 openssl ``` ### Windows - Visual Studio 2019+ or MinGW - CMake 3.16+ - Qt5/6 SDK - OpenSSL for Windows (vcpkg or prebuilt binaries) ## Building ### Linux / macOS 1. **Create and generate certificates:** ```bash cd certs ./generate_certs.sh cd .. ``` 2. **Build the project:** ```bash mkdir build cd build cmake .. make ``` 3. **Install (optional):** ```bash make install ``` ### Windows 1. **Generate certificates** (use OpenSSL for Windows or WSL): ```bash cd certs # On Windows, use Git Bash or WSL to run generate_certs.sh # Or generate manually using OpenSSL cd .. ``` 2. **Build:** ```bash mkdir build cd build cmake -G "Visual Studio 16 2019" .. cmake --build . --config Release ``` ## Running ### Server ```bash # Linux / macOS ./build/chat_server certs/server.crt certs/server.key # Windows .\build\Release\chat_server.exe certs\server.crt certs\server.key ``` The server will listen on `localhost:42317`. ### Qt Client ```bash # Linux / macOS ./build/chat_client_qt # Windows (if built on Windows) .\build\Release\chat_client_qt.exe ``` Connect to server by entering host/port and clicking "Connect". ### Windows Client ```bash # Windows only .\build\Release\chat_client_win.exe ``` ## Customization Features ### Background Color - Click "BG Color" button to select background color for all windows - Color choice is applied immediately ### Text Color - Click "Text Color" button to select chat text color - Updates chat display in real-time ### Transparency - Use the transparency slider (0-100%) to adjust window opacity - 0% = fully transparent, 100% = fully opaque ## SSL/TLS Certificates ### Generate Self-Signed Certificates For development and testing: ```bash cd certs # Generate private key openssl genrsa -out server.key 2048 # Generate certificate (valid for 365 days) openssl req -new -x509 -key server.key -out server.crt -days 365 \ -subj "/C=US/ST=State/L=City/O=SCAR/CN=localhost" cd .. ``` **Note:** For production, use certificates signed by a trusted Certificate Authority (CA). ### Ignoring Self-Signed Certificates The Qt client is configured to ignore self-signed certificate errors during development: ```cpp socket->ignoreSslErrors(); ``` For production, implement proper certificate validation. ## Project Structure ``` scar-chat/ ├── CMakeLists.txt # Top-level CMake configuration ├── README.md # This file ├── certs/ # SSL certificates directory │ └── generate_certs.sh # Certificate generation script ├── src/ │ ├── server/ │ │ └── server.cpp # TLS server (OpenSSL) │ ├── qt_client/ │ │ └── main.cpp # Qt GUI client │ └── windows_client/ │ └── main_win.cpp # Win32 GUI client └── build/ # Build output directory (created after cmake) ``` ## Troubleshooting ### "Connection refused" error - Ensure server is running on the same host/port - Check firewall settings on port 42317 ### SSL/TLS errors - Verify certificates exist in `certs/` directory - Regenerate certificates if expired or corrupted - Ensure certificate and key files are readable ### Qt not found during CMake ```bash # Set Qt path explicitly cmake -DQt5_DIR=/path/to/Qt5/lib/cmake/Qt5 .. ``` ### OpenSSL not found during CMake ```bash # Set OpenSSL path explicitly (macOS example) cmake -DOPENSSL_DIR=/usr/local/opt/openssl .. ``` ## Development Notes - **C++17** standard is required - **Qt5/6** for cross-platform GUI - **OpenSSL 1.1+** for TLS/SSL - Threading used for non-blocking socket operations - Message protocol: simple newline-delimited UTF-8 text ## Security Considerations - ✅ Uses TLS 1.2+ for encrypted communication - ⚠️ Development mode: ignores self-signed certificate errors - ⚠️ No user authentication implemented - ⚠️ No message encryption at application level (relies on TLS) For production use, implement: - Proper certificate validation - User authentication and authorization - Message signing/verification - Rate limiting and DoS protection ## License This project is provided as-is for educational and development purposes.