public key cryptography notes