An better documented and slightly better designed
update is available for download, in case anyone's interested.
In the next version, an attacker will need private keys from both parties in order to decrypt the translation. The handshaking protocol will thus be something like:
[client] PublicKey: <client's public key>
[server] PublicKey: <server's public key>
[client] CipherKey: <random cipher key encrypted with server's public key>
[server] CipherKey: <random cipher key encrypted with client's public key>
<stream of data encrypted with server's cipher key XORed with client's key>