Project presentation
Tux++ : Maroš Valter, Matěj Plch, Lukáš Toldy
PB173, fall 2014
Qt usage
- Qt library used quite extensively
- different style of programming
- need to study a lot of docs
- docs are sometimes obsolete
- still great (and best) C++ library
- Qt is cross-platform and so is our project
Networking
- fully asynchronous design
- networking in Qt is asynchronous by design
- no need to implement threading
- communication scheme same as in the specification
Symmetric encryption module
- high performance: 50+ MB/s
- using QtConcurrent::run() for background precomputations
- no mutex used
- race condition eliminated using QFuture
- AES provided by PolarSSL
Asymmetric encryption
- 2048-bits RSA
- used library PolarSSL
Client-server encryption
- protected by SSL
- QSslSocket
- keys and certificates generated using OpenSSL
Testing
- problematic
- little time for application => no time for tests
- not easy to test asynchronous applications
- event loop must be running
- waiting for results blocks event loop
Database
- MS SQL on Windows
- SQLite on Linux
Problems
- PolarSSL
- APIchanged between versions 1.2 and 1.3
- ripping sources from the library is TERRIBLE, hell full of #define, doesn't work (infinite loop in RSA)
What is working
- client-server connection
- login, register, users list distribution
- SSL encryption
- high speed symmetric encryption module
- database
- key exchange between clients (unencrypted)
What is not working
- client-client communication
- problems binding QUDPSocket
- tested only on the same client
- symmetric encryption tools ready, but not used
- database integrity in SQLite
- assymetric encryption
- successfully tested on short messages
- long messages are weird
Source
- https://github.com/TuxPPTeam