Theory of Public Key Cryptography